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 FileWriter
s 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