Java FileWriter

A Java FileWriter osztály java.io.FileWriter lehetővé teszi karakterek írását egy fájlba. Ebben a tekintetben a Java FileWriter nagyjából úgy működik, mint a FileOutputStream, azzal a különbséggel, hogy a FileOutputStream bájtalapú, míg a FileWriter karakteralapú. A FileWriter tehát szöveg írására szolgál. Egy karakter egy vagy több bájtnak felelhet meg, a használt karakterkódolási sémától függően. A Java FileWriter osztály egyébként a Java Writer osztály alosztálya.

FileWriter példa

Íme egy egyszerű Java FileWriter példa:

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

Megjegyzés: A megfelelő kivételkezelést itt az áttekinthetőség kedvéért kihagytuk. A helyes kivételkezelésről bővebben a Java IO kivételkezelés című fejezetben olvashatsz.

A FileWriter-nak más konstruktorai is vannak, amelyekkel különböző módon adhatod meg a fájlt, amelybe írni szeretnél. Nézd meg a hivatalos JavaDoc-ban a részletesebb információkat.

Fájl felülírása vs. csatolása

Amikor létrehozol egy Java FileWriter-t, eldöntheted, hogy felülírsz-e bármilyen meglévő, azonos nevű fájlt, vagy csatolsz-e bármilyen meglévő fájlhoz. Ezt úgy döntjük el, hogy kiválasztjuk, milyen FileWriter konstruktort használunk.

A FileWriter konstruktor, amely csak egy paramétert, a fájlnevet veszi fel, minden létező fájlt felülír:

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

FileWriter van egy konstruktor, amely szintén 2 paramétert vesz fel: A fájlnevet és egy booleant. A boolean jelzi, hogy egy meglévő fájlt csatoljon vagy írjon felül. Íme két Java FileWriter példa, amely ezt mutatja:

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

FileWriter karakterkódolás

A FileWriter feltételezi, hogy a fájlba küldött bájtokat az alkalmazásunk által használt számítógép alapértelmezett karakterkódolásával akarjuk kódolni. Ez nem biztos, hogy mindig az, amit akarsz, és nem tudod megváltoztatni!

Ha más karakterkódolási sémát akarsz megadni, ne használj FileWriter-t. Használjon helyette egy OutputStreamWriter-et egy FileOutputStream-ön. A OutputStreamWriter segítségével megadhatja a karakterkódolási sémát, amelyet a bájtoknak a mögöttes fájlba történő írása során használjon.

write(int)

A Java FileWriter write(int) metódusa a int alsó 16 bitjét írja ki egyetlen karakterként a célállomásra, amelyhez a FileWriter kapcsolódik. Íme egy példa egyetlen karakter írására egy Java FileWriter-ba:

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

write(char)

A Java FileWriter rendelkezik egy write(char) metódussal is, amely egy karaktertömböt tud írni a célállomásra, amelyhez a FileWriter csatlakozik. A write(char) metódus a FileWriter-ra ténylegesen írt karakterek számát adja vissza. Íme egy példa egy karaktertömb írására egy Java FileWriter-ba:

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

Teljesítmény írása

Gyorsabb egy karaktertömböt írni egy Java FileWriterbe, mint egyszerre egy karaktert írni. A sebességnövekedés igen jelentős lehet – akár 10x nagyobb vagy nagyobb. Ezért ajánlott a write(char) módszereket használni, amikor csak lehetséges.

A pontos sebességnövekedés a Java kódot futtató számítógép mögöttes operációs rendszerétől és hardverétől függ. A sebességnövekedés olyan kérdésektől függ, mint a memória sebessége, a merevlemez sebessége és a puffer mérete stb.

Transzparens pufferelés a BufferedWriter segítségével

A Java FileWriter programba írt bájtok transzparens pufferelését egy Java BufferedWriter-be csomagolva érheti el. A BufferedWriter-ba írt összes bájt először a BufferedWriter belső bájttömbjében lesz pufferelve. Amikor a puffer megtelt, a puffer egyszerre kiürül a mögöttes FileWriter-ba. Íme egy példa a Java FileWriter egy BufferedWriter-ba csomagolására:

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

A BufferedWriter-ról bővebben a BufferedWriter bemutatómban olvashatsz.

flush()

A Java FileWriter flush() metódusa a FileWriter-ba írt összes adatot a mögöttes fájlba öblíti. Előfordulhat, hogy az adatok valahol az operációs rendszer memóriájában vannak pufferelve, még akkor is, ha a Java kódod a FileWriter-ra írta őket. A flush() meghívásával biztosíthatja, hogy minden pufferelt adat a lemezre kerüljön. Íme egy példa a Java FileWriter-ra írt adatok lehúzására a flush() metódus meghívásával:

fileWriter.flush();

Closing a FileWriter

Amikor befejeztük a karakterek írását egy Java FileWriter-ra, ne felejtsük el bezárni azt. Egy FileWriter lezárása a close() metódusának meghívásával történik. Így néz ki egy Java FileWriter bezárása:

fileWriter.close();

Használhatjuk a Java 7-ben bevezetett try-with-resources konstrukciót is. Így néz ki egy FileWriter használata és lezárása a try-with-resources konstruktummal:

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

Leave a Reply