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 większej liczbie bajtów, w zależności od używanego schematu kodowania znaków. Klasa Java FileWriter
jest podklasą klasy Java Writer.
przykład zapisu plików
Oto prosty przykład Javy 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 pominięta tutaj dla jasności. Aby dowiedzieć się więcej o prawidłowej obsłudze WYJĄTKÓW, przejdź do Java IO Exception Handling.
FileWriter
ma również inne konstruktory, co pozwala określić plik do zapisu na różne sposoby. Zajrzyj do oficjalnego JavaDoc, aby uzyskać więcej szczegółowych informacji.
nadpisywanie a dołączanie pliku
podczas tworzenia środowiska 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 konstruktor FileWriter
, którego używasz.
konstruktor FileWriter
biorąc tylko jeden parametr, nazwę pliku, nadpisze dowolny istniejący plik:
Writer fileWriter = new FileWriter("c:\data\output.txt");
FileWriter
posiada konstruktor, który przyjmuje również 2 parametry: nazwę pliku i wartość logiczną. Wartość logiczna wskazuje, czy dołączyć lub nadpisać istniejący plik. Oto dwa przykłady Javy 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
FileWriter
zakłada, że chcesz zakodować bajty do pliku przy użyciu domyślnego kodowania znaków dla komputera, na którym działa aplikacja. To może nie zawsze 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
. OutputStreamWriter
pozwala określić schemat kodowania znaków używany podczas zapisu bajtów do pliku bazowego.
write(int)
metoda Java FileWriter
write(int)
zapisuje dolny 16 bit int
do miejsca docelowego, do którego jest podłączony FileWriter
, jako pojedynczy znak. Oto przykład zapisu pojedynczego znaku do Javy FileWriter
:
FileWriter fileWriter = new FileWriter("data/output.txt");fileWriter.write('A');
write(char)
Java FileWriter
ma również metodę write(char)
, która może zapisać tablicę znaków do miejsca docelowego, do którego jest podłączony FileWriter
. Metoda write(char)
Zwraca liczbę znaków faktycznie zapisanych do FileWriter
. Oto przykład zapisu tablicy znaków do Javy FileWriter
:
FileWriter fileWriter = new FileWriter("data/output.txt");char chars = new char{'A','B','C','D','E'};fileWriter.write(chars);
wydajność zapisu
szybsze jest zapisywanie tablicy znaków do Java FileWriter niż zapisywanie jednego znaku naraz. Przyspieszenie może być dość znaczące – do 10 x wyższe lub więcej. Dlatego zaleca się stosowanie metod write(char)
w miarę możliwości.
dokładna prędkość zależy od systemu operacyjnego i sprzętu komputera, na którym uruchamiasz kod Java. Szybkość zależy od problemów, takich jak prędkość pamięci, prędkość dysku twardego i rozmiary buforów itp.
przezroczyste buforowanie przez BufferedWriter
możesz uzyskać przezroczyste buforowanie bajtów zapisanych do Javy FileWriter
, zawijając je w Java BufferedWriter . Wszystkie bajty zapisane do BufferedWriter
będą najpierw buforowane wewnątrz wewnętrznej tablicy bajtów w BufferedWriter
. Gdy bufor jest pełny, bufor jest spłukiwany do bazy FileWriter
naraz. Oto przykład zawijania Javy FileWriter
w BufferedWriter
:
int bufferSize = 8 * 1024;Writer writer = new BufferedWriter( new FileWriter("c:\data\output-file.txt"), bufferSize );
możesz przeczytać więcej o BufferedWriter
w moim tutorialu BufferedWriter.
flush()
metoda Java FileWriter
’s flush()
spłukuje wszystkie dane zapisane do FileWriter
do pliku bazowego. Dane mogą być gdzieś buforowane w pamięci systemu operacyjnego, nawet jeśli twój kod Java zapisał go na FileWriter
. Wywołując flush()
możesz mieć pewność, że wszystkie buforowane dane zostaną zapisane na dysku. Oto przykład spłukiwania danych zapisanych w Javie FileWriter
przez wywołanie jej metody flush()
:
fileWriter.flush();
zamykanie maszyny do zapisu plików
po zakończeniu pisania znaków w Javie FileWriter
należy pamiętać o jej zamknięciu. Zamykanie FileWriter
odbywa się poprzez wywołanie jej metody close()
. Oto jak wygląda zamykanie Javy FileWriter
:
fileWriter.close();
możesz także użyć konstrukcji try-with-resources wprowadzonej w Javie 7. Oto jak używać i zamykać wygląd FileWriter
za pomocą konstrukcji try-with-resources:
try(FileWriter fileWriter = new FileWriter("data\filewriter.txt") ){ fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3");}