2009-10-27 9 views
6

Los recursos comunes FileUtils parecen bastante geniales, y no puedo creer que no se puedan agregar a un archivo.Se puede hacer que apache FileUtils.writeLines() se agregue a un archivo si existe

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

Lo anterior simplemente se cambia el contenido del archivo cada vez, y me gustaría mantener el etiquetado de estas cosas para poner fin al igual que lo hace el código.

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

¡He buscado el javadoc pero no he encontrado nada! ¿Qué me estoy perdiendo?

Respuesta

7

Puede utilizar IOUtils.writeLines(), que recibe un objeto de escritor que se puede inicializar como en su segundo ejemplo.

+0

entonces debería poner verdadero en las líneas "las líneas para escribir, las entradas nulas producen líneas en blanco"? – wizztjh

5

Ahora su método es como appendString (...) en la clase FileUtils.

Pero se puede obtener el flujoSalida de FileUtils.openOutputStream (...) y de escribir en él mediante el uso de

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

Puede calculte el principio, de modo que usted apend al archivo.

EDITAR

Después de leer la respuesta Davids i reconocido que la BufferedWriter va a hacer este trabajo para usted

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

También incluiría un output.flush() para escribir la secuencia en el archivo. –

0

que podría hacer algo como

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

ouch: rendimiento muy peligroso golpear aquí. – jayunit100

1

A partir de FileUtils Apache 2.1 que tiene este método:

(archivo del archivo, los datos CharSequence, append booleano) sin efecto de escritura estática

1

Hay un sobrecarga para FileUtils.writelines() que toma el parámetro sobre si agregar o no.

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

archivo - el archivo para escribir en

líneas - las líneas para escribir, entradas nulas producen líneas en blanco

append - si se añadirán cierto, entonces las líneas al final de la presentar en lugar de sobrescribir

Caso 1:

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

file_to_write voluntad c ontain solo

line 2 

Como la primera escritura en el mismo archivo varias veces sobrescribirá el archivo.

Caso 2:

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

file_to_write contendrá

line 1 
line 2 

La segunda llamada se anexará al mismo archivo.

Compruebe esto de la documentación oficial de java para más detalles. https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#writeLines(java.io.File, java.util.Collection, boolean)

+0

Simplemente publicando un enlace externo para una respuesta no es apropiado para SO. Intenta explicarlo. –

+1

Gracias @sparky. Lo dejó así, ya que la documentación oficial de Java era simple y se explica por sí misma. Sin embargo edité mi respuesta ahora. – Kris

Cuestiones relacionadas