Java FileWriter

Java FileWriter-klassen, java.io.FileWriter, gör det möjligt att skriva tecken till en fil. I det avseendet fungerar Java FileWriter ungefär som FileOutputStream förutom att en FileOutputStream är bytebaserad, medan en FileWriter är teckenbaserad. FileWriter är med andra ord avsedd för att skriva text. Ett tecken kan motsvara en eller flera bytes, beroende på vilket teckenkodningsschema som används. Java FileWriter-klassen är förresten en underklass till Java Writer-klassen.

FileWriter Exempel

Här är ett enkelt Java FileWriter-exempel:

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

Observera: Den korrekta undantagshanteringen har hoppats över här för tydlighetens skull. Om du vill lära dig mer om korrekt undantagshantering går du till Java IO Exception Handling.

FileWriter har också andra konstruktörer som låter dig ange filen att skriva till på olika sätt. Titta i den officiella JavaDoc för mer detaljerad information.

Overwriting vs. Appending the File

När du skapar en Java FileWriter kan du bestämma om du vill skriva över en befintlig fil med samma namn, eller om du vill lägga till en befintlig fil. Du bestämmer det genom att välja vilken FileWriter-konstruktör du använder.

FileWriter-konstruktören som bara tar en parameter, filnamnet, kommer att skriva över vilken befintlig fil som helst:

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

FileWriter har en konstruktör som tar 2 parametrar också: Filnamnet och en boolean. Boolean anger om en befintlig fil ska läggas till eller skrivas över. Här är två Java FileWriter-exempel som visar det:

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

FileWriter Teckenkodning

FileWriter förutsätter att du vill koda bytena till filen med hjälp av standardteckenkodningen för den dator som ditt program körs på. Detta kanske inte alltid är vad du vill, och du kan inte ändra det!

Om du vill ange en annan teckenkodning ska du inte använda en FileWriter. Använd istället en OutputStreamWriter på en FileOutputStream. Med OutputStreamWriter kan du ange vilket teckenkodningsschema som ska användas när du skriver bytes till den underliggande filen.

write(int)

Java FileWriter write(int)-metoden skriver de nedre 16 bitarna i int till den destination som FileWriter är ansluten till, som ett enda tecken. Här är ett exempel på att skriva ett enskilt tecken till en Java FileWriter:

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

write(char)

Java FileWriter har också en write(char)-metod som kan skriva en array av tecken till destinationen som FileWriter är ansluten till. write(char)-metoden returnerar antalet tecken som faktiskt skrivits till FileWriter. Här är ett exempel på att skriva en array av tecken till en Java FileWriter:

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

Skrivprestanda

Det går snabbare att skriva en array av tecken till en Java FileWriter än att skriva ett tecken i taget. Hastighetsökningen kan vara ganska betydande – upp till 10 x högre eller mer. Därför rekommenderas det att använda write(char)-metoderna när det är möjligt.

Den exakta hastighetsökning du får beror på det underliggande operativsystemet och hårdvaran på den dator du kör Java-koden på. Hastighetsökningen beror på frågor som minneshastighet, hårddiskhastighet och buffertstorlekar etc.

Transparent buffring via BufferedWriter

Du kan få transparent buffring av bytes som skrivs till en Java FileWriter genom att omsluta den i en Java BufferedWriter . Alla bytes som skrivs till BufferedWriter kommer först att buffras i en intern byte array i BufferedWriter. När bufferten är full spolas bufferten till den underliggande FileWriter på en gång. Här är ett exempel på hur man lindar in en Java FileWriter i en BufferedWriter:

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

Du kan läsa mer om BufferedWriter i min handledning om BufferedWriter.

flush()

Java FileWriters flush()-metod spolar alla data som skrivs i FileWriter till den underliggande filen. Datan kan vara buffrad i OS-minnet någonstans, även om din Javakod har skrivit den till FileWriter. Genom att anropa flush() kan du försäkra dig om att alla buffrade data kommer att spolas (skrivas) till disken. Här är ett exempel på att spola data som skrivits till en Java FileWriter genom att anropa dess flush() metod:

fileWriter.flush();

Slutar en FileWriter

När du är klar med att skriva tecken till en Java FileWriter bör du komma ihåg att stänga den. Att stänga en FileWriter görs genom att anropa dess close()-metod. Så här ser det ut när du stänger en Java FileWriter:

fileWriter.close();

Du kan också använda konstruktionen try-with-resources som introducerades i Java 7. Så här använder och stänger du en FileWriter looks med konstruktionen 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