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