Java FileWriter

La classe Java FileWriter, java.io.FileWriter, permette di scrivere caratteri su un file. In questo senso, il Java FileWriter funziona come il FileOutputStream, eccetto che un FileOutputStream è basato sul byte, mentre un FileWriter è basato sul carattere. Il FileWriter è destinato a scrivere testo, in altre parole. Un carattere può corrispondere a uno o più byte, a seconda dello schema di codifica dei caratteri in uso. La classe Java FileWriter è una sottoclasse della classe Java Writer, a proposito.

FileWriter Esempio

Ecco un semplice esempio di Java FileWriter:

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

Nota: la corretta gestione delle eccezioni è stata saltata qui per motivi di chiarezza. Per saperne di più sulla corretta gestione delle eccezioni, vai a Java IO Exception Handling.

Il FileWriter ha anche altri costruttori, che ti permettono di specificare il file su cui scrivere in modi diversi. Guardate nel JavaDoc ufficiale per informazioni più dettagliate.

Sovrascrivere o aggiungere il file

Quando create un Java FileWriter potete decidere se volete sovrascrivere qualsiasi file esistente con lo stesso nome, o se volete aggiungere un file esistente. Lo decidi scegliendo quale costruttore FileWriter usi.

Il costruttore FileWriter che prende un solo parametro, il nome del file, sovrascriverà qualsiasi file esistente:

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

FileWriter ha anche un costruttore che prende 2 parametri: Il nome del file e un booleano. Il booleano indica se aggiungere o sovrascrivere un file esistente. Ecco due esempi Java FileWriter che mostrano che:

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

Il FileWriter assume che tu voglia codificare i byte al file usando la codifica dei caratteri predefinita per il computer su cui l’applicazione è in esecuzione. Questo potrebbe non essere sempre quello che vuoi, e non puoi cambiarlo!

Se vuoi specificare un diverso schema di codifica dei caratteri, non usare un FileWriter. Usa invece un OutputStreamWriter su un FileOutputStream. Il OutputStreamWriter vi permette di specificare lo schema di codifica dei caratteri da usare quando scrivete i byte al file sottostante.

write(int)

Il metodo Java FileWriter write(int) scrive i 16 bit inferiori del int alla destinazione a cui il FileWriter è collegato, come un singolo carattere. Ecco un esempio di scrittura di un singolo carattere su un Java FileWriter:

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

write(char)

Il Java FileWriter ha anche un metodo write(char) che può scrivere un array di caratteri alla destinazione a cui il FileWriter è collegato. Il metodo write(char) restituisce il numero di caratteri effettivamente scritti sul FileWriter. Ecco un esempio di scrittura di un array di caratteri su un Java FileWriter:

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

Prestazioni di scrittura

È più veloce scrivere un array di caratteri su un Java FileWriter che scrivere un carattere alla volta. L’aumento di velocità può essere abbastanza significativo – fino a 10 volte superiore o più. Perciò si raccomanda di usare i metodi write(char) ogni volta che è possibile.

L’esatta accelerazione che si ottiene dipende dal sistema operativo sottostante e dall’hardware del computer su cui si esegue il codice Java. La velocizzazione dipende da questioni come la velocità della memoria, la velocità del disco rigido e le dimensioni del buffer, ecc.

Transparent Buffering via BufferedWriter

È possibile ottenere un buffering trasparente dei byte scritti in un Java FileWriter avvolgendolo in un Java BufferedWriter. Tutti i byte scritti nel BufferedWriter verranno prima bufferizzati all’interno di un array di byte interno al BufferedWriter. Quando il buffer è pieno, il buffer viene scaricato nel FileWriter sottostante tutto in una volta. Ecco un esempio di come avvolgere un Java FileWriter in un BufferedWriter:

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

Puoi leggere di più sul BufferedWriter nel mio tutorial BufferedWriter.

flush()

Il metodo flush() di Java FileWriter fa il flush di tutti i dati scritti nel FileWriter nel file sottostante. I dati potrebbero essere bufferizzati nella memoria del sistema operativo da qualche parte, anche se il vostro codice Java li ha scritti su FileWriter. Chiamando flush() potete assicurarvi che qualsiasi dato bufferizzato venga lavato (scritto) su disco. Ecco un esempio di lavaggio dei dati scritti su un Java FileWriter chiamando il suo metodo flush():

fileWriter.flush();

Closing a FileWriter

Quando hai finito di scrivere caratteri su un Java FileWriter dovresti ricordarti di chiuderlo. La chiusura di un FileWriter si fa chiamando il suo metodo close(). Ecco come appare la chiusura di un Java FileWriter:

fileWriter.close();

Potete anche usare il costrutto try-with-resources introdotto in Java 7. Ecco come utilizzare e chiudere un FileWriter con il costrutto 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