Problematyka zapisu tekstu do pliku jest zupełnie analogiczna do problematyki odczytu. Podobnie jak do odczytu tak do zapisu używamy klas implementujących strumienie, dostarczanych w pakiecie java.io biblioteki standardowej Java SE. Prostą metodę, która zapisałaby kolejne elementy z tablicy stringów jako kolejne wiersze do pliku tekstowego moglibyśmy zaimplementować następująco:
public void writeFile(String filePath, String[] textLines) throws IOException { FileWriter fileWriter = new FileWriter(filePath); BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); try { for (String line : textLines) { bufferedWriter.write(line); bufferedWriter.newLine(); } } finally { bufferedWriter.close(); } }
Zauważmy, że metoda ta jest bardzo podobna do metody odczytującej której implementację podałem w artykule „Odczyt tekstu z pliku”. W pierwszej linii metody writeFile(…) tworzymy obiekt klasy java.io.FileWriter. Jest to klasa która służy do zapisywania ciągu znaków do pliku tekstowego, przy użyciu domyślnego kodowania. Implementując metodę do odczytu readFile(…) robiliśmy coś bardzo podobnego, tyle że tam używaliśmy klasy FileReader.
W drugiej linii, zupełnie analogicznie jak w metodzie readFile(…) z artykułu „Odczyt tekstu z pliku”, opakowujemy obiekt klasy FileWriter w obiekt klasy java.io.BufferedWriter. Korzystając z pętli FOR-EACH iterujemy po kolejnych elementach tablicy stringów i zapisujemy je do pliku za pomocą metody write(…). Chemy aby kolejne stringi zapisane były w kolejnych liniach a więc musimy jeszcze po każdym stringu zapisać do pliku znak końca linii. Możemy to zrobić wywołując metodę newLine(). Znak końca linii jest różny dla różnych systemów operacyjnych, ale dzięki metodzie newLine() nie musimy się o to martwić. Metoda ta wybiera ten odpowiedni i właśnie go zapisuje.
Podobnie jak w przypadku stumieni służących do zapisu danych do pliku tak strumienie służące do odczytu zajmują zasoby systemowe, które po zakończonej pracy musimy zwolnić. Robimy to wywołując metodę close().
Metoda writeFile(…) w formie pokazanej powyżej zapisuje tekst do pliku nadpisując każdorazowo to co było w nim zapisane. W ramach ćwiczenia zmodyfikujmy ją teraz w taki sposób, aby zamiast zapisywania za każdym razem tekstu na nowo dopisywała tekst do tego już zapisanego. Kluczem do rozwiązania tego zadania jest lektura dokumentacji konstruktorów klasy FileWriter. Musimy użyć innego konstruktora. Odnajdźmy w dokumentacji ten właściwy i użyjmy go odpowiednio.