zapis do pliku-nadpisywanie elementow

0

hej,
mam nastepujacy problem-mam metode ktora ma zapisywac do pliku. problemem jest jednak, ze przy kazdym zapisaniu nowy wpis nadpisuje stary:

public void writeToFile(byte[] _bytes){
		
	try{
		_dos = _fileConnection.openDataOutputStream();
		_dos.write(_bytes, 0, _bytes.length);
		_dos.flush();
		_dos.close();
		
		}catch(Exception e){		}
		
	}//end of writeToFile() method

moge zrobic w ten sposob, ze za kazdym razem czytam z pliku i to co przeczytalam dodaje do tego nowego wpisu i zapisuje, cos na zasadzie:
A(stary wpis)+B(nowy wpis) = AB
zapisz(AB)
kod:

	public void writeToFile(byte[] _bytes){
		
		try{
		
			_dos = _fileConnection.openDataOutputStream();
			_dis = _fileConnection.openDataInputStream();
			int _c;
			StringBuffer _sb = new StringBuffer();
			
			while( (_c = _dis.read()) != -1 ){
				_sb.append( (char)_c);
			}
			
			String _str = new String(_bytes);
			_sb.append(_str);
			
			_dos.write(_sb.toString().getBytes());
			_dos.flush();
			_dos.close();
			_dis.close();
		
		
		}catch(Exception e){		}
		
	}//end of writeToFile() method
	

nie podoba mi sie jednak ten sposob, bo mysle sobie ze w przypadku gdy moj plik bedzie duzy, ten sposob bedzie malo wydajny. bo nie dosc ze wpierw musze wszystko przeczytac, to potem jeszcze to dodac do nowego wpisu i calosc zapisac..

czy ktos z Was moglby mi zasugerowac jakis inny sposob?

  pzdr,
       misty
0

FileWriter(String fileName, boolean append)
Constructs a FileWriter object given a file name with a boolean indicating whether or not to append the data written.

0

Po pierwsze używaj standardowej notacji javy, a nie zmienne typu _dos, po drugie nie wyłapuj wyjątków Exceptions tylko konkretne np IOException, a po trzecie jeśli ten kod nie jest używany w programie wielowątkowym to lepiej użyj klasy StringBuilder zamiast StringBuffer ;-)

0

Sam program moze byc wielowatkowy, grunt zeby StringBuilder nie byl wykorzystywany w wielu watkach.

0

Mam problem, bo chce zmienic w moim pliku tekstowym dana linie ale nie chce zczytywac calego pliku i potem na powrot go zapisywac ze zmieniona linia, wolabym zeby sie dalo po prostu zczytac dana linie i ja zmienic i zapisac?

0
bogdans napisał(a)

FileWriter(String fileName, boolean append)
Constructs a FileWriter object given a file name with a boolean indicating whether or not to append the data written.

Mogę prosić o rozwinięty przykład sprawdzenia istnienia pliku w folderze programu i otwarciu istniejącego do zapisu lub utworzeniu nowego zależnie od sytuacji.
Z góry dzięki.

Nie mogę znaleźć a kompletnie nie wychodzi mi złożenie tego do kupy

0

Komplikujesz sobie życie sprawdzaniem.

try
{
    FileWriter f=new FileWriter(nameOfFile,true);
    //zapisanie
    f.close();
}
catch(IOException e)
{
    //komunikat o błędzie (zła nazwa pliku, pliku nie ma i nie można utworzyć)
}

Jeśli pliku nie ma to zostanie utworzony, jeśli jest, to powyższy kod dopisze do tego pliku.

0

akurat borykałem się z podobnym problemem , chciałem żeby to co wyświetlać się będzie w głównym textBox'ie aplikacji zapisywane było do pliku z datą w folderze LOG

mam nadzieję, że Ci pomoże , mnie naprowadził "bo" , za co mu niezmiernie dziękuję :)

fileWriter dopisywanie do pliku

public void textLogInfo(String wiadomosc)
    {
        BufferedWriter fileAppender = null;
        
        textLog.append("["+DataGodzina()+"]"+wiadomosc+"\n"); 
        try
        {
            fileAppender = new BufferedWriter(new FileWriter("LOG"+File.separator+nazwaPliku+".txt",true));
            fileAppender.write("["+DataGodzina()+"]"+wiadomosc+"\n");
            fileAppender.newLine();
            fileAppender.flush();
        }
        catch(IOException ioex)
        {
            textLog.append(ioex.getMessage());
        }
        finally
        {
            if(fileAppender != null)
                try
                {
                    fileAppender.close();
                }
                catch(IOException ioex)
                {
                    textLog.append(ioex.getMessage());
                }
        }
    }
    
    public void stworzLog()
    {
        boolean folderLog = new File(System.getProperty("user.dir"), "LOG").mkdir();                
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1