Java FileWriter
Třída Java FileWriter, java.io.FileWriter
, umožňuje zapisovat znaky do souboru. V tomto ohledu funguje Java FileWriter podobně jako FileOutputStream
s tím rozdílem, že FileOutputStream
je založena na bajtech, zatímco FileWriter
je založena na znacích. Jinými slovy, FileWriter
je určen k zápisu textu. Jeden znak může odpovídat jednomu nebo více bajtům v závislosti na použitém schématu kódování znaků. Třída Java FileWriter
je mimochodem podtřídou třídy Java Writer.
Příklad třídy FileWriter
Zde je jednoduchý příklad třídy Java FileWriter
:
Writer fileWriter = new FileWriter("data\filewriter.txt");fileWriter.write("data 1");fileWriter.write("data 2");fileWriter.write("data 3");fileWriter.close();
Poznámka: Vlastní zpracování výjimek zde bylo z důvodu přehlednosti přeskočeno. Chcete-li se dozvědět více o správném ošetření výjimek, přejděte na stránku Obsluha výjimek v Javě IO.
FileWriter
má i další konstruktory, které umožňují různými způsoby určit soubor, do kterého se má zapisovat. Podrobnější informace najdete v oficiálním dokumentu JavaDoc.
Přepsání vs. připojení souboru
Při vytváření javovského FileWriter
se můžete rozhodnout, zda chcete přepsat jakýkoli existující soubor se stejným názvem, nebo zda chcete připojit jakýkoli existující soubor. Rozhodnete se tak tím, že si vyberete, jaký konstruktor FileWriter
použijete.
Konstruktor FileWriter
, který bere pouze jeden parametr, jméno souboru, přepíše jakýkoli existující soubor:
Writer fileWriter = new FileWriter("c:\data\output.txt");
FileWriter
má také konstruktor, který bere dva parametry: Název souboru a boolean. Boolean udává, zda se má připojit nebo přepsat existující soubor. Zde jsou dva příklady Java FileWriter
, které to ukazují:
Writer fileWriter = new FileWriter("c:\data\output.txt", true); //appends to fileWriter fileWriter = new FileWriter("c:\data\output.txt", false); //overwrites file
FileWriter Kódování znaků
FileWriter
Předpokládá, že chcete zakódovat bajty do souboru pomocí výchozího kódování znaků pro počítač, na kterém vaše aplikace běží. To nemusí být vždy to, co chcete, a nemůžete to změnit!
Pokud chcete zadat jiné schéma kódování znaků, nepoužívejte FileWriter
. Místo toho použijte OutputStreamWriter
na FileOutputStream
. OutputStreamWriter
umožňuje určit schéma kódování znaků, které se má použít při zápisu bajtů do základního souboru.
write(int)
Metoda Java FileWriter
write(int)
zapíše dolních 16 bitů int
do cíle, ke kterému je FileWriter
připojen, jako jeden znak. Zde je příklad zápisu jednoho znaku do Java FileWriter
:
FileWriter fileWriter = new FileWriter("data/output.txt");fileWriter.write('A');
write(char)
Java FileWriter
má také metodu write(char)
, která může zapsat pole znaků do cíle, ke kterému je FileWriter
připojena. Metoda write(char)
vrací počet znaků skutečně zapsaných do FileWriter
. Zde je příklad zápisu pole znaků do Java FileWriter
:
FileWriter fileWriter = new FileWriter("data/output.txt");char chars = new char{'A','B','C','D','E'};fileWriter.write(chars);
Write Performance
Je rychlejší zapisovat pole znaků do Java FileWriter než zapisovat po jednom znaku. Zrychlení může být poměrně výrazné – až 10 x vyšší nebo vyšší. Proto se doporučuje používat metody write(char)
, kdykoli je to možné.
Přesné zrychlení závisí na základním operačním systému a hardwaru počítače, na kterém kód Javy spouštíte. Zrychlení závisí na záležitostech, jako je rychlost paměti, rychlost pevného disku a velikost vyrovnávací paměti atd.
Transparentní vyrovnávací paměť pomocí BufferedWriter
Transparentní vyrovnávací paměť bajtů zapsaných do Java FileWriter
můžete získat zabalením do Java BufferedWriter . Všechny bajty zapsané do BufferedWriter
se nejprve uloží do vyrovnávací paměti uvnitř interního pole bajtů v BufferedWriter
. Když je vyrovnávací paměť plná, je najednou propláchnuta do podkladového FileWriter
. Zde je příklad zabalení javovského FileWriter
do BufferedWriter
:
int bufferSize = 8 * 1024;Writer writer = new BufferedWriter( new FileWriter("c:\data\output-file.txt"), bufferSize );
Více o BufferedWriter
si můžete přečíst v mém tutoriálu BufferedWriter.
flush()
Metoda flush()
javovského FileWriter
spláchne všechna data zapsaná do FileWriter
do základního souboru. Data mohou být někde ve vyrovnávací paměti operačního systému, i když je váš kód Javy zapsal do FileWriter
. Voláním flush()
si můžete zajistit, že všechna data uložená ve vyrovnávací paměti budou propláchnuta (zapsána) na disk. Zde je příklad spláchnutí dat zapsaných do javovského FileWriter
voláním jeho metody flush()
:
fileWriter.flush();
Zavření zapisovače souborů
Po dokončení zápisu znaků do javovského FileWriter
byste jej neměli zapomenout zavřít. Uzavření FileWriter
se provádí voláním jeho metody close()
. Takto vypadá uzavření javovského FileWriter
:
fileWriter.close();
Můžete také použít konstrukci try-with-resources, která byla zavedena v Javě 7. Takto vypadá použití a uzavření FileWriter
pomocí konstrukce 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