Java FileWriter

Java FileWriter-klassen, java.io.FileWriter, gør det muligt at skrive tegn til en fil. I den henseende fungerer Java FileWriter på samme måde som FileOutputStream, bortset fra at en FileOutputStream er bytebaseret, mens en FileWriter er tegnbaseret. FileWriter er med andre ord beregnet til at skrive tekst. Et tegn kan svare til en eller flere bytes, afhængigt af det anvendte tegnkodningsskema. Java FileWriter-klassen er i øvrigt en underklasse af Java Writer-klassen.

FileWriter Eksempel

Her er et simpelt Java FileWriter-eksempel:

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

Bemærk: Den egentlige undtagelsesbehandling er sprunget over her for overskuelighedens skyld. Hvis du vil vide mere om korrekt undtagelseshåndtering, kan du gå til Java IO Exception Handling.

FileWriter har også andre konstruktører, så du kan angive den fil, der skal skrives til, på forskellige måder. Se i den officielle JavaDoc for mere detaljerede oplysninger.

Overskrivning vs. tilføjelse af filen

Når du opretter en Java FileWriter, kan du beslutte, om du vil overskrive enhver eksisterende fil med samme navn, eller om du vil tilføje til enhver eksisterende fil. Det bestemmer du ved at vælge, hvilken FileWriter-konstruktør du bruger.

FileWriter-konstruktøren, der kun tager én parameter, filnavnet, vil overskrive enhver eksisterende fil:

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

FileWriter har en konstruktør, der også tager 2 parametre: Filnavnet og en boolean. Den boolean angiver, om en eksisterende fil skal tilføjes eller overskrives. Her er to Java FileWriter-eksempler, der viser det:

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

FileWriter Character Encoding

FileWriter forudsætter, at du ønsker at kode bytes til filen ved hjælp af standardtegnkodningen for den computer, som dit program kører på. Dette er måske ikke altid det, du ønsker, og du kan ikke ændre det!

Hvis du vil angive et andet tegnkodningsskema, skal du ikke bruge en FileWriter. Brug i stedet en OutputStreamWriter på en FileOutputStream. Med OutputStreamWriter kan du angive det tegnkodningsskema, der skal bruges, når du skriver bytes til den underliggende fil.

write(int)

Java FileWriter write(int)-metoden skriver de nederste 16 bit af int til den destination, som FileWriter er forbundet til, som et enkelt tegn. Her er et eksempel på at skrive et enkelt tegn til en Java FileWriter:

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

write(char)

Java FileWriter har også en write(char)-metode, som kan skrive et array af tegn til den destination, som FileWriter er tilsluttet. write(char)-metoden returnerer det antal tegn, der faktisk er skrevet til FileWriter. Her er et eksempel på at skrive et array af tegn til en Java FileWriter:

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

Skrivningspræstation

Det er hurtigere at skrive et array af tegn til en Java FileWriter end at skrive et tegn ad gangen. Hastighedsforøgelsen kan være ganske betydelig – op til 10 x højere eller mere. Derfor anbefales det at bruge write(char)-metoderne, når det er muligt.

Den nøjagtige hastighedsforøgelse, du får, afhænger af det underliggende operativsystem og hardwaren på den computer, du kører Java-koden på. Hastighedsforøgelsen afhænger af forhold som hukommelseshastighed, harddiskhastighed og bufferstørrelser osv.

Transparent buffering via BufferedWriter

Du kan få transparent buffering af bytes, der skrives til en Java FileWriter ved at indpakke den i en Java BufferedWriter . Alle bytes, der skrives til BufferedWriter, vil først blive gemt i et internt byte array i BufferedWriter. Når bufferen er fuld, bliver bufferen skyllet til den underliggende FileWriter på én gang. Her er et eksempel på indpakning af 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æse mere om BufferedWriter i min tutorial om BufferedWriter.

flush()

Java FileWriter‘s flush()-metode skyller alle data, der skrives til FileWriter, til den underliggende fil. Dataene kan være gemt i OS-hukommelsen et eller andet sted, selv om din Java-kode har skrevet dem til FileWriter. Ved at kalde flush() kan du sikre, at alle bufferede data vil blive flushet (skrevet) til disken. Her er et eksempel på at skylle data, der er skrevet til en Java FileWriter, ved at kalde dens flush()-metode:

fileWriter.flush();

Slukning af en FileWriter

Når du er færdig med at skrive tegn til en Java FileWriter, skal du huske at lukke den. Lukning af en FileWriter sker ved at kalde dens close()-metode. Sådan ser det ud at lukke en Java FileWriter:

fileWriter.close();

Du kan også bruge konstruktionen try-with-resources, der blev indført i Java 7. Sådan bruger og lukker du en FileWriter ser ud med try-with-resources-konstruktionen:

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

Leave a Reply