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