2009-10-27 11 views
6

I comuni FileUtils sembrano piuttosto interessanti, e non posso credere che non possano essere fatti per aggiungere a un file.Può apache FileUtils.writeLines() essere fatto per aggiungere a un file se esiste

File file = new File(path); 
FileUtils.writeLines(file, printStats(new DateTime(), headerRequired)); 

È possibile che questo sostituisce solo il contenuto del file ogni volta, e vorrei solo per mantenere la codifica questa roba alla fine proprio come fa questo codice.

fw = new FileWriter(file, true); 
try{ 
    for(String line : printStats(new DateTime(), headerRequired)){ 
     fw.write(line + "\n"); 
    } 
} 
finally{ 
    fw.close(); 
} 

Ho cercato la javadoc ma non ho trovato nulla! Cosa mi manca?

risposta

7

Si può usare IOUtils.writeLines(), si riceve un oggetto Writer che è possibile inizializzare come nella vostra secondo esempio.

+0

quindi dovrei mettere true nelle righe "le righe da scrivere, le voci null producono righe vuote"? – wizztjh

5

Il loro è ora un metodo come appendString (...) nella classe FileUtils.

Ma è possibile ottenere l'OutputStream da FileUtils.openOutputStream (...) e che scrivere ad esso utilizzando

write(byte[] b, int off, int len) 

È possibile calculte il via, in modo che si apend al file.

EDIT

Dopo aver letto Davids risposta ho riconosciuto che il BufferedWriter farà questo lavoro per voi

BufferedWriter output = new BufferedWriter(new FileWriter(simFile)); 
output.append(text); 
+1

Includerei anche un output.flush() per scrivere lo stream sul file. –

0

si potrebbe fare qualcosa di simile

List x = FileUtils.readLines(file); 
x.add(String) 
FileUtils.writelines(file,x); 
+1

ahi: prestazioni molto pericolose colpite qui. – jayunit100

1

A partire dal fileutils Apache 2.1 si dispone di questo metodo:

statica (del file, i dati CharSequence, accodamento booleano) vuoto write

1

C'è un overload per FileUtils.writelines() che accetta i parametri se aggiungere o meno.

public static void writeLines(File file, 
      Collection<?> lines, 
      boolean append) 
        throws IOException 

di file - il file da scrivere

linee - le linee per scrivere, le voci nulli producono righe vuote

append - se saranno aggiunti alla fine del vero, allora le linee file anziché sovrascrivere

Case1:

FileUtils.writeLine(file_to_write, "line 1"); 
FileUtils.writeLine(file_to_write, "line 2"); 

file_to_write volontà c contenere una sola

line 2 

quanto prima scrittura per lo stesso file più volte si sovrascrivere il file.

Case2:

FileUtils.writeLine(file_to_write, "line 1"); 
FileUtils.writeLine(file_to_write, "line 2", true); 

file_to_write conterrà

line 1 
line 2 

La seconda chiamata aggiungerà allo stesso file.

Controllare questo dalla documentazione ufficiale java per ulteriori dettagli. https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.util.Collection, booleano)

+0

Pubblicare semplicemente un collegamento esterno per una risposta non è appropriato per SO. Prova a spiegarlo. –

+1

Grazie a @sparky. Lasciato così come la documentazione ufficiale di Java era semplice e auto esplicativa. Comunque modificato la mia risposta ora. – Kris

Problemi correlati