Otwarcie pliku za pomocą FileWriter bez utraty zawartości pliku

0

Witam! Mam następujące pytanie: Czy istnieje możliwość aby otworzyć plik (uzyskać dostęp do pliku) za pomocą FileWritera tak, aby nie usuwał on zawartości pliku? Nie interesuje mnie dopisywanie do pliku, bo konstruktor z dwoma parametrami tej klasy znam, ale muszę zrobić coś takiego, że odczytuję do zmiennej zawartość pliku, a następnie wpisuje do niego nową wartość, jednak kasując już tą poprzednią. Za każdym razem gdy przekazuję do FileWritera obiekt typu File, to on usuwa plik i tworzy nowy nawet, gdy ten już istnieje. Paranoja.

Z góry dzięki za odpowiedzi.

3

To może do czytania użyj PlikoCzytacza (z ang. FileReader) zamiast PlikoZapisywacza (FileWriter)? Brzmi logicznie.

0

Niestety w programie odczytuję i zapisuję, więc FileWriter jest mi potrzebny, a muszę go "wywołać", żeby móc wpisać coś do pliku, a w tym momencie on kasuje mi poprzednią zawartość i próba odczytania poprzedniej treści kończy się błędem, bo plik jest pusty i tracę dane. Do odczytu używam oczywiście FileReadera, udało mi się odkryć, że on nie kasuje zawartości pliku/nie tworzy nowego i z nim nie ma problemu, natomiast stwarza go FileWriter. Wiem, że jest wiele metod na obsługę plików, może ktoś mógłby mi polecić jakąś adekwatną do następującego algorytmu, który mniej więcej tak wygląda:

  1. Jeśli plik nie istnieje, utwórz go, wpisz wartość 0 i zapisz ją do zmiennej. W przeciwnym wypadku od razu odczytaj zawartość pliku i zapisz do zmiennej typu int.
    (W pliku mają być zapisywane tylko liczby).
  2. Zwiększ wartość zmiennej o 1.
  3. Zapisz do pliku wartość zmiennej usuwając poprzednią wartość.

I ten algorytm się powtarza dopóki użytkownik nie zakończy pewnego działania w programie i go nie wyłączy.
Na razie program zapisuje wszystko w jednej linijce i ja odczytuję tylko pierwszą linijkę, a później, jeśli już się z tym obecnym problemem uporam, to będę zapisywał w następnych liniach, a usuwać będę chciał tylko pierwszą i w niej zapisywać tą jedną konkretną informację, która w tej linijce pierwszej ma być, myślę, że z tym sobie poradzę, ale na razie to mnie zaskakuje ten FileWriter.

0

Dokumentacja: http://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html Twoim przyjacielem.

... = new FileWriter(nazwaPliku,true);
0

@pavon147 mówił, że nie o to chodzi...
Dlaczego nie możesz najpierw przy pomocy FileReader-a odczytać danych, a później zapisać ich FileWriterem? Zależy Ci na tym, żeby zrobić to w jednej transakcji, to zablokuj sobie całą operację.

File file = new File("nazwa_pliku");
....
//sprawdź, czy istnieje
...
synchronized(file){
  FileReader ...
  //zapis do zmiennej, inkrementacja
  FileWriter ...
  //zapis do pliku z zastąpieniem istniejących danych
}

Gdzie tu jest problem?

0

Dopiero teraz przeczytałem dokładnie post. Czy pomiędzy zapisem do pliku a odczytem wywołujesz metodę close() lub flush()?

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