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