如何将新的文本行添加到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!";
然后您可以使用以下方法之一:
-
使用
Files.write
(小文件):try { Files.write(p, s.getBytes(), StandardOpenOption.APPEND); } catch (IOException e) { System.err.println(e); }
-
使用
Files.newBufferedWriter
(文本文件):try (BufferedWriter writer = Files.newBufferedWriter(p, StandardOpenOption.APPEND)) { writer.write(s); } catch (IOException ioe) { System.err.format("IOException: %s%n", ioe); }
-
使用
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); }
-
使用
Files.newByteChannel
(随机访问文件):try (SeekableByteChannel sbc = Files.newByteChannel(p, StandardOpenOption.APPEND)) { sbc.write(ByteBuffer.wrap(s.getBytes())); } catch (IOException e) { System.err.println(e); }
-
使用
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)
以便追加到文件而不是覆盖。