如何将新的文本行添加到Java中的现有文件?

我想追加一个新的行到现有的文件,而不删除该文件的当前信息。 总之,下面是我使用当前时间的方法:

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(); 

上述问题与他们正在删除我的现有文件的所有内容,然后添加新的行文本。

我想在文件内容的末尾添加一些文本,而不会擦除或replace任何内容。

您必须以追加模式打开文件,这可以通过使用FileWriter(String fileName, boolean append)构造函数来实现。

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

应该做的伎俩

FileWriter的解决scheme正在工作,但是你不可能指定输出编码,在这种情况下,机器的默认编码将被使用,而这通常不是UTF-8!

所以最好使用FileOutputStream

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

试试:“ \ r \ n

Java 7的例子:

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

Java 7开始:

在开始处定义一个path和包含行分隔符的String:

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

然后您可以使用以下方法之一:

  1. 使用Files.write (小文件):

     try { Files.write(p, s.getBytes(), StandardOpenOption.APPEND); } catch (IOException e) { System.err.println(e); } 
  2. 使用Files.newBufferedWriter (文本文件):

     try (BufferedWriter writer = Files.newBufferedWriter(p, StandardOpenOption.APPEND)) { writer.write(s); } catch (IOException ioe) { System.err.format("IOException: %s%n", ioe); } 
  3. 使用Files.newOutputStream (与java.io API互操作):

     try (OutputStream out = new BufferedOutputStream(Files.newOutputStream(p, StandardOpenOption.APPEND))) { out.write(s.getBytes()); } catch (IOException e) { System.err.println(e); } 
  4. 使用Files.newByteChannel (随机访问文件):

     try (SeekableByteChannel sbc = Files.newByteChannel(p, StandardOpenOption.APPEND)) { sbc.write(ByteBuffer.wrap(s.getBytes())); } catch (IOException e) { System.err.println(e); } 
  5. 使用FileChannel.open (随机访问文件):

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

有关这些方法的详细信息可以在Oracle的教程中find 。

如果你正在寻找创build和写入文件的剪切和粘贴方法,下面是我写的只是一个stringinput。 如果您想每次覆盖文件,请从PrintWriter中删除“true”。

 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(); } } } 

如果要将数据追加到文件FileWriter(String fileName, boolean append)可以使用FileWriter(String fileName, boolean append)构造函数。

将您的代码更改为:

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

从FileWriter javadoc:

用给定的文件名构造一个FileWriter对象。 如果第二个参数为true ,则字节将被写入到文件的结尾而不是开头。

在第2 new FileWriter(my_file_name)更改为new FileWriter(my_file_name, true)以便追加到文件而不是覆盖。