Java FileWriter

Klasa Java FileWriter, java.io.FileWriter, umożliwia zapisywanie znaków do pliku. Pod tym względem Java FileWriter działa podobnie jak FileOutputStream z tą różnicą, że FileOutputStream jest oparty na bajtach, podczas gdy FileWriter jest oparty na znakach. FileWriter jest przeznaczony do pisania tekstu, innymi słowy. Jeden znak może odpowiadać jednemu lub kilku bajtom, w zależności od używanego schematu kodowania znaków. Klasa Java FileWriter jest przy okazji podklasą klasy Java Writer.

FileWriter Przykład

Oto prosty przykład Java FileWriter:

Writer fileWriter = new FileWriter("data\filewriter.txt");fileWriter.write("data 1");fileWriter.write("data 2");fileWriter.write("data 3");fileWriter.close();

Uwaga: Właściwa obsługa wyjątków została tu pominięta dla zachowania przejrzystości. Aby dowiedzieć się więcej o poprawnej obsłudze wyjątków, przejdź do Java IO Exception Handling.

The FileWriter ma również inne konstruktory, pozwalające określić plik do zapisu na różne sposoby. Poszukaj w oficjalnym JavaDoc bardziej szczegółowych informacji.

Overwriting vs. Appending the File

Kiedy tworzysz Java FileWriter możesz zdecydować, czy chcesz nadpisać dowolny istniejący plik o tej samej nazwie, czy chcesz dołączyć do dowolnego istniejącego pliku. Decydujesz o tym, wybierając, jakiego konstruktora FileWriter używasz.

Konstruktor FileWriter przyjmujący tylko jeden parametr, nazwę pliku, nadpisze każdy istniejący plik:

Writer fileWriter = new FileWriter("c:\data\output.txt");

FileWriter ma konstruktor, który również przyjmuje 2 parametry: Nazwę pliku i boolean. The boolean wskazuje, czy dołączyć lub nadpisać istniejący plik. Oto dwa przykłady Java FileWriter pokazujące, że:

Writer fileWriter = new FileWriter("c:\data\output.txt", true); //appends to fileWriter fileWriter = new FileWriter("c:\data\output.txt", false); //overwrites file

FileWriter Kodowanie znaków

The FileWriter zakłada, że chcesz kodować bajty do pliku przy użyciu domyślnego kodowania znaków dla komputera, na którym działa twoja aplikacja. Nie zawsze może to być to, czego chcesz, i nie możesz tego zmienić!

Jeśli chcesz określić inny schemat kodowania znaków, nie używaj FileWriter. Zamiast tego użyj OutputStreamWriter na FileOutputStream. Metoda OutputStreamWriter pozwala określić schemat kodowania znaków, który ma być używany podczas zapisywania bajtów do pliku bazowego.

write(int)

Metoda Java FileWriter write(int) zapisuje dolne 16 bitów wartości int do miejsca docelowego, z którym połączona jest FileWriter, jako pojedynczy znak. Oto przykład zapisania pojedynczego znaku do metody Java FileWriter:

FileWriter fileWriter = new FileWriter("data/output.txt");fileWriter.write('A');

write(char)

Metoda Java FileWriter ma również metodę write(char), która może zapisać tablicę znaków do miejsca docelowego, z którym połączona jest metoda FileWriter. Metoda write(char) zwraca liczbę znaków faktycznie zapisanych do FileWriter. Oto przykład zapisu tablicy znaków do Java FileWriter:

FileWriter fileWriter = new FileWriter("data/output.txt");char chars = new char{'A','B','C','D','E'};fileWriter.write(chars);

Write Performance

Szybciej jest zapisać tablicę znaków do Java FileWriter niż pisać jeden znak na raz. Przyspieszenie może być dość znaczące – do 10 x większe lub więcej. Dlatego zaleca się używanie metod write(char) zawsze, gdy jest to możliwe.

Dokładny wzrost prędkości zależy od podstawowego systemu operacyjnego i sprzętu komputera, na którym uruchamiasz kod Java. Przyspieszenie zależy od takich kwestii jak szybkość pamięci, szybkość dysku twardego i rozmiary buforów itp.

Przezroczyste buforowanie przez BufferedWriter

Możesz uzyskać przezroczyste buforowanie bajtów napisanych do Java FileWriter przez zawijanie go w Java BufferedWriter . Wszystkie bajty zapisane do BufferedWriter będą najpierw buforowane wewnątrz wewnętrznej tablicy bajtów w BufferedWriter. Kiedy bufor jest pełny, bufor jest przepłukiwany do bazowego FileWriter wszystkie naraz. Oto przykład zawijania Java FileWriter w BufferedWriter:

int bufferSize = 8 * 1024;Writer writer = new BufferedWriter( new FileWriter("c:\data\output-file.txt"), bufferSize );

Więcej o BufferedWriter możesz przeczytać w moim tutorialu BufferedWriter.

flush()

Metoda flush() Java FileWriter spłukuje wszystkie dane zapisane w FileWriter do bazowego pliku. Dane mogą być gdzieś buforowane w pamięci OS, nawet jeśli Twój kod Java zapisał je do FileWriter. Przez wywołanie flush() możesz zapewnić, że wszelkie buforowane dane zostaną przepłukane (zapisane) na dysk. Oto przykład przepłukiwania danych zapisanych w FileWriter Javy przez wywołanie jej metody flush():

fileWriter.flush();

Closing a FileWriter

Gdy skończysz zapisywać znaki w FileWriter Javy, powinieneś pamiętać o jego zamknięciu. Zamknięcie FileWriter odbywa się poprzez wywołanie jego metody close(). Oto jak wygląda zamykanie Java FileWriter:

fileWriter.close();

Można również użyć konstrukcji try-with-resources wprowadzonej w Javie 7. Oto jak użyć i zamknąć FileWriter wyglądający z konstrukcją try-with-resources:

try(FileWriter fileWriter = new FileWriter("data\filewriter.txt") ){ fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3");}

Leave a Reply