Per cercare di migliorare un po' la situazione ecco il mio consiglio.
Se stai scrivendo dei file di testo, usa un PrintWriter associato ad un BufferedWriter a sua volta associato ad un FileWriter. In questo modo benefici di due "ottimizzazioni": le classi Writer, rispetto alle classi Stream, sono progettate appositamente per il testo; in più, l'utilizzo di un BufferedWriter ti consente di bufferizzare le scritture, diminuendo gli accessi fisici al disco.
Puoi tentare anche di diminuire ulteriormente le scritture usando uno StringBuffer in cui accodare le varie righe... ma è una non-soluzione (un artificio in più) perchè il BufferedWriter dovrebbe essere già sufficientemente performante.
codice:
// Uso un Writer anzichè uno Stream perchè è più adatto ai caratteri
FileWriter fw = new FileWriter("C:/Users/Downloads/file.txt");
// Uso un Buffer, così limito gli accessi fisici al disco
BufferedWriter bw = new BufferedWriter( fw );
// Uso un Printer così ho diversi metodi utili (print/println)
PrintWriter pw = new PrintWriter( bw );
Ricordati, comunque, di effettuare un flush() prima di chiudere il file... non uno per ogni scrittura (altrimenti perdi l'agevolazione data dalla bufferizzazione), ma uno solo appena prima di chiudere il file.
Io solitamente uso questa struttura:
codice:
FileWriter fw = null;
BufferedWriter bw = null;
PrintWriter pw = null;
try {
fw = new FileWriter("C:/Users/Downloads/file.txt");
bw = new BufferedWriter( fw );
pw = new PrintWriter( bw );
...
pw.println( ... ); // Scrivo una riga sul file
...
// Ho finito... faccio il flush di tutto
pw.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (pw != null) {
try { pw.close(); } catch (Exception e) { }
} else {
if (bw != null) {
try { bw.close(); } catch (Exception e) { }
} else {
if (fw != null) {
try { fw.close(); } catch (Exception e) { }
}
}
}
}
Ciao.