Java-Filskriverklassen, java.io.FileWriter
, gør det muligt at skrive tegn til en fil. I den henseende fungerer Java-Filskriveren meget som FileOutputStream
bortset fra at en FileOutputStream
er byte-baseret, mens en FileWriter
er tegnbaseret. FileWriter
er beregnet til at skrive tekst, med andre ord. Et tegn kan svare til en eller flere bytes afhængigt af tegnkodningsskemaet i brug. Java FileWriter
– klassen er forresten en underklasse af Java-Forfatterklassen.
Filskrivereksempel
her er en simpel 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 korrekte undtagelseshåndtering er sprunget over her for klarhedens skyld. Hvis du vil vide mere om korrekt undtagelseshåndtering, skal du gå til Java io undtagelseshåndtering.
FileWriter
har også andre konstruktører, så du kan angive den fil, du skal skrive til på forskellige måder. Se i den officielle JavaDoc for mere detaljeret info.
overskrivning vs. tilføjelse af filen
når du opretter en Java FileWriter
kan du beslutte, om du vil overskrive en eksisterende fil med samme navn, eller om du vil føje til en eksisterende fil. Du bestemmer det ved at vælge hvad FileWriter
konstruktør du bruger.
konstruktøren FileWriter
tager kun en parameter, filnavnet, overskriver enhver eksisterende fil:
Writer fileWriter = new FileWriter("c:\data\output.txt");
FileWriter
har en konstruktør, der også tager 2 parametre: filnavnet og en boolsk. Boolean angiver, om en eksisterende fil skal tilføjes eller overskrives. Her er to Java FileWriter
eksempler, der viser, at:
Writer fileWriter = new FileWriter("c:\data\output.txt", true); //appends to fileWriter fileWriter = new FileWriter("c:\data\output.txt", false); //overwrites file
Filskriver tegnkodning
FileWriter
antager, at du vil kode bytes til filen ved hjælp af standardtegnkodningen for den computer, din applikation kører på. Dette er måske ikke altid det, du vil have, og du kan ikke ændre det!
hvis du vil angive et andet tegnkodningsskema, skal du ikke bruge et FileWriter
. Brug en OutputStreamWriter
på en FileOutputStream
i stedet. Med OutputStreamWriter
kan du angive det tegnkodningsskema, der skal bruges, når du skriver bytes til den underliggende fil.
skriv(int)
Java FileWriter
write(int)
metoden skriver den nederste 16 bit af int
til destinationen 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');
skriv(char)
Java FileWriter
har også en write(char)
metode, der kan skrive en række tegn til destinationen FileWriter
er forbundet til. Metoden write(char)
Returnerer antallet af tegn, der faktisk er skrevet til FileWriter
. Her er et eksempel på at skrive en række tegn til en Java FileWriter
:
FileWriter fileWriter = new FileWriter("data/output.txt");char chars = new char{'A','B','C','D','E'};fileWriter.write(chars);
skriv ydeevne
det er hurtigere at skrive en række tegn til en Java-Filskriver end at skrive et tegn ad gangen. Speedup kan være ret signifikant-op til 10 gange højere eller mere. Derfor anbefales det at bruge write(char)
– metoderne, når det er muligt.
den nøjagtige hastighed, du får, afhænger af det underliggende operativsystem og udstyr på den computer, du kører Java-koden på. Hastigheden afhænger af problemer som hukommelseshastighed, harddiskhastighed og bufferstørrelser osv.
gennemsigtig Buffering via Bufferedskriver
du kan få gennemsigtig buffering af bytes skrevet til en Java FileWriter
ved at indpakke den i en Java Bufferedskriver . Alle bytes skrevet til BufferedWriter
vil først blive bufferet inde i et internt byte array i BufferedWriter
. Når bufferen er fuld, skylles bufferen til den underliggende FileWriter
på en 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 Bufferedskriver tutorial.
flush ()
Java FileWriter
‘s flush()
metode skyller alle data skrevet til FileWriter
til den underliggende fil. Dataene kan blive bufferet i OS-hukommelsen et eller andet sted, selvom din Java-kode har skrevet den til FileWriter
. Ved at ringe flush()
kan du forsikre dig om, at eventuelle bufferede data bliver skyllet (skrevet) til disken. Her er et eksempel på skylning af data skrevet til en Java FileWriter
ved at kalde dens flush()
metode:
fileWriter.flush();
lukning af en Filskriver
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 sin close()
metode. Her er hvordan lukning af en Java FileWriter
ser ud:
fileWriter.close();
du kan også bruge try-med-ressourcer construct introduceret i Java 7. Sådan bruges og lukkes et FileWriter
udseende med try-med-resources-konstruktionen:
try(FileWriter fileWriter = new FileWriter("data\filewriter.txt") ){ fileWriter.write("data 1"); fileWriter.write("data 2"); fileWriter.write("data 3");}