Java FileWriter

De Java FileWriter class, java.io.FileWriter, maakt het mogelijk om karakters naar een bestand te schrijven. In dat opzicht werkt de Java FileWriter ongeveer zoals de FileOutputStream, behalve dat een FileOutputStream is gebaseerd op bytes, terwijl een FileWriter is gebaseerd op karakters. De FileWriter is bedoeld om tekst te schrijven, met andere woorden. Een karakter kan overeenkomen met een of meer bytes, afhankelijk van het gebruikte karakter coderingsschema. De Java FileWriter klasse is overigens een subklasse van de Java Writer klasse.

FileWriter Voorbeeld

Hier volgt een eenvoudig Java FileWriter voorbeeld:

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

Opmerking: De juiste exception handling is hier voor de duidelijkheid overgeslagen. Om meer te leren over correcte exception handling, ga naar Java IO Exception Handling.

De FileWriter heeft ook andere constructors, waarmee je het bestand om naar te schrijven op verschillende manieren kunt specificeren. Kijk in de officiële JavaDoc voor meer gedetailleerde info.

Overwriting vs. Appending the File

Wanneer u een Java FileWriter maakt, kunt u beslissen of u een bestaand bestand met dezelfde naam wilt overschrijven, of dat u een bestaand bestand wilt appen. U bepaalt dat door te kiezen welke FileWriter constructor u gebruikt.

De FileWriter constructor die slechts één parameter neemt, de bestandsnaam, zal elk bestaand bestand overschrijven:

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

FileWriter heeft een constructor die ook 2 parameters neemt: De bestandsnaam en een booleaans. De boolean geeft aan of een bestaand bestand moet worden toegevoegd of overschreven. Hier zijn twee Java FileWriter voorbeelden die dat laten zien:

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

De FileWriter gaat ervan uit dat u de bytes naar het bestand wilt coderen met de standaard character encoding voor de computer waarop uw applicatie draait. Dit is niet altijd wat u wilt, en u kunt het niet veranderen!

Als u een andere tekencodering wilt opgeven, gebruik dan geen FileWriter. Gebruik in plaats daarvan een OutputStreamWriter op een FileOutputStream. Met de OutputStreamWriter kunt u het tekencoderingsschema opgeven dat moet worden gebruikt bij het schrijven van bytes naar het onderliggende bestand.

write(int)

De Java FileWriter write(int) methode schrijft de onderste 16 bits van de int naar de bestemming waarmee de FileWriter is verbonden, als een enkel karakter. Hier volgt een voorbeeld van het schrijven van een enkel karakter naar een Java FileWriter:

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

write(char)

De Java FileWriter heeft ook een write(char) methode die een array van karakters kan schrijven naar de bestemming waar de FileWriter mee verbonden is. De methode write(char) retourneert het aantal karakters dat daadwerkelijk naar de FileWriter is geschreven. Hier volgt een voorbeeld van het schrijven van een array van karakters naar een Java FileWriter:

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

Write Performance

Het is sneller om een array van karakters naar een Java FileWriter te schrijven dan één karakter per keer. De snelheid kan behoorlijk oplopen – tot 10 x hoger of meer. Daarom wordt aanbevolen om waar mogelijk de write(char) methoden te gebruiken.

De exacte snelheid die u krijgt hangt af van het onderliggende OS en de hardware van de computer waarop u de Java code uitvoert. De snelheid is afhankelijk van zaken als geheugen snelheid, harde schijf snelheid en buffer maten etc.

Transparent Buffering via BufferedWriter

U kunt transparante buffering van bytes geschreven naar een Java FileWriter krijgen door het te wikkelen in een Java BufferedWriter . Alle bytes die naar de BufferedWriter worden geschreven, worden eerst gebufferd in een interne byte array in de BufferedWriter. Als de buffer vol is, wordt de buffer in één keer doorgespoeld naar de onderliggende FileWriter. Hier is een voorbeeld van het verpakken van een Java FileWriter in een BufferedWriter:

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

U kunt meer lezen over de BufferedWriter in mijn BufferedWriter tutorial.

flush()

De Java FileWriter’s flush() methode spoelt alle gegevens die naar de FileWriter zijn geschreven door naar het onderliggende bestand. De gegevens kunnen ergens in het OS-geheugen zijn gebufferd, zelfs als uw Java-code ze naar de FileWriter heeft geschreven. Door flush() aan te roepen kunt u er zeker van zijn dat alle gebufferde gegevens worden doorgespoeld (geschreven) naar schijf. Hier is een voorbeeld van het doorspoelen van gegevens die naar een Java FileWriter zijn geschreven door de flush() methode aan te roepen:

fileWriter.flush();

Closeing a FileWriter

Wanneer u klaar bent met het schrijven van tekens naar een Java FileWriter moet u niet vergeten deze te sluiten. Het sluiten van een FileWriter wordt gedaan door de close() methode aan te roepen. Hier ziet u hoe het sluiten van een Java FileWriter eruit ziet:

fileWriter.close();

U kunt ook gebruik maken van de try-with-resources constructie die in Java 7 is geïntroduceerd. Hier ziet u hoe het gebruiken en sluiten van een FileWriter eruit ziet met de try-met-bronnen constructie:

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

Leave a Reply