¿Cómo agregar una nueva línea de texto a un archivo existente en Java?

Me gustaría añadir una nueva línea a un archivo existente sin borrar la información actual de ese archivo. En resumen, aquí está la metodología que estoy usando la hora actual:

import java.io.BufferedWriter; import java.io.FileWriter; import java.io.Writer; Writer output; output = new BufferedWriter(new FileWriter(my_file_name)); //clears file every time output.append("New Line!"); output.close(); 

El problema con las líneas anteriores es simplemente que están borrando todos los contenidos de mi archivo existente y luego agregando el nuevo texto de línea.

Quiero agregar texto al final de los contenidos de un archivo sin borrar o reemplazar nada.

debe abrir el archivo en modo de FileWriter(String fileName, boolean append) , lo que se puede lograr utilizando el FileWriter(String fileName, boolean append) .

 output = new BufferedWriter(new FileWriter(my_file_name, true)); 

debería hacer el truco

La solución con FileWriter está funcionando, sin embargo, no tiene posibilidad de especificar la encoding de salida, en cuyo caso se utilizará la encoding predeterminada para la máquina, ¡y esto generalmente no es UTF-8!

Entonces, en el mejor de los casos, use FileOutputStream :

  Writer writer = new BufferedWriter(new OutputStreamWriter( new FileOutputStream(file, true), "UTF-8")); 

Pruebe: ” \ r \ n

Ejemplo de Java 7:

 // append = true try(PrintWriter output = new PrintWriter(new FileWriter("log.txt",true))) { output.printf("%s\r\n", "NEWLINE"); } catch (Exception e) {} 

A partir de Java 7 :

Defina una ruta y la cadena que contiene el separador de línea al comienzo:

 Path p = Paths.get("C:\\Users\\first.last\\test.txt"); String s = System.lineSeparator() + "New Line!"; 

y luego puedes usar uno de los siguientes enfoques:

  1. Usando Files.write (archivos pequeños):

     try { Files.write(p, s.getBytes(), StandardOpenOption.APPEND); } catch (IOException e) { System.err.println(e); } 
  2. Usando Files.newBufferedWriter (archivos de texto):

     try (BufferedWriter writer = Files.newBufferedWriter(p, StandardOpenOption.APPEND)) { writer.write(s); } catch (IOException ioe) { System.err.format("IOException: %s%n", ioe); } 
  3. Usando Files.newOutputStream (interoperable con las API de java.io ):

     try (OutputStream out = new BufferedOutputStream(Files.newOutputStream(p, StandardOpenOption.APPEND))) { out.write(s.getBytes()); } catch (IOException e) { System.err.println(e); } 
  4. Usando Files.newByteChannel (archivos de acceso aleatorio):

     try (SeekableByteChannel sbc = Files.newByteChannel(p, StandardOpenOption.APPEND)) { sbc.write(ByteBuffer.wrap(s.getBytes())); } catch (IOException e) { System.err.println(e); } 
  5. Utilizando FileChannel.open (archivos de acceso aleatorio):

     try (FileChannel sbc = FileChannel.open(p, StandardOpenOption.APPEND)) { sbc.write(ByteBuffer.wrap(s.getBytes())); } catch (IOException e) { System.err.println(e); } 

Los detalles sobre estos métodos se pueden encontrar en el tutorial de Oracle .

En caso de que esté buscando un método de cortar y pegar que cree y escriba en un archivo, aquí hay uno que escribí que solo toma una entrada de Cadena. Elimine ‘verdadero’ de PrintWriter si desea sobrescribir el archivo cada vez.

 private static final String newLine = System.getProperty("line.separator"); private synchronized void writeToFile(String msg) { String fileName = "c:\\TEMP\\runOutput.txt"; PrintWriter printWriter = null; File file = new File(fileName); try { if (!file.exists()) file.createNewFile(); printWriter = new PrintWriter(new FileOutputStream(fileName, true)); printWriter.write(newLine + msg); } catch (IOException ioex) { ioex.printStackTrace(); } finally { if (printWriter != null) { printWriter.flush(); printWriter.close(); } } } 

Puede usar el FileWriter(String fileName, boolean append) si desea adjuntar datos al archivo.

Cambia tu código a esto:

 output = new BufferedWriter(new FileWriter(my_file_name, true)); 

Desde FileWriter javadoc:

Construye un objeto FileWriter dado un nombre de archivo. Si el segundo argumento es verdadero , los bytes se escribirán al final del archivo en lugar de al principio.

En la línea 2, cambie el new FileWriter(my_file_name) al new FileWriter(my_file_name, true) modo que esté adjuntando al archivo en lugar de sobreescribirlo.

 File f = new File("/path/of/the/file"); try { BufferedWriter bw = new BufferedWriter(new FileWriter(f, true)); bw.append(line); bw.close(); } catch (IOException e) { System.out.println(e.getMessage()); }