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