zapis do pliku-nadpisywanie elementow

zapis do pliku-nadpisywanie elementow
MI
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 12 lat
0

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

Kopiuj
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:

Kopiuj
	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
bogdans
Moderator
  • Rejestracja:prawie 17 lat
  • Ostatnio:prawie 5 lat
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.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
KA
  • Rejestracja:prawie 18 lat
  • Ostatnio:około 13 lat
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 ;-)


"Jam częścią tej siły, która wiecznie zła pragnąc, wiecznie czyni dobro"
J.W. von Goethe "Faust"
0

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

RA
  • Rejestracja:ponad 18 lat
  • Ostatnio:13 dni
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?

KO
  • Rejestracja:ponad 13 lat
  • Ostatnio:ponad 12 lat
  • Postów:12
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.

Kopiuj
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.

KO
naprawdę? wołają na kolację więc teraz nie sprawdzę ale spędziłem nad tym 1,5h (włączając w to trochę (lim "trochę">1,5h) czasu na temacie bash) :)
SH
  • Rejestracja:około 20 lat
  • Ostatnio:ponad 12 lat
  • Postów:32
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

Kopiuj
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();                
    }

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.