写不同的线路到文件

问题描述:

我有这种方法,每一个,它被称为一次写入一个文件:写不同的线路到文件

public void writeToFile(String ins) { 
    FileWriter fw = new FileWriter(f); 
    BufferedWriter bw = new BufferedWriter(fw); 

    bw.write(ins); 
    bw.newLine(); 

    bw.close(); 
    fw.close(); 
} 

但只写在文件的第一行。

所以,如果我把它称为与“世界”,“你好”,然后再一次,该文件将包含“世界”,但是我正在寻找的结果是:

你好

世界

我之前和写入字符串后使用BufferedWriter.newLine()尝试,但结果是一样的吗?

+2

你检查FileWriter的文档?查看构造函数的第二个参数:https://docs.oracle.com/javase/7/docs/api/java/io/FileWriter.html#FileWriter(java.io.File,%20boolean)(换句话说,你想'追加'到一个文件,而不是写/覆盖它) – domsson

+2

可能重复的[如何将文本添加到现有的文件在Java](http://*.com/questions/1625234/how-to-附加文本到现有文件在java) – Tom

+0

http:// *。com/questions/1625234 /如何追加文本到java中的现有文件 – AppX

你必须使用FileWriter(String fileName, boolean append)

FileWriter fw = new FileWriter(f, true); 

读取的FileWriter的documentation

FileWriter的(文件文件,布尔附加) 构造给出布尔值,指示是否要写入的数据附加文件名的FileWriter对象。

,你看,你需要追加值设置为true:

FileWriter fw = new FileWriter(f, true); 

的一点是:你的代码做的是什么应该这样做 - 它使用FileWriter,默认情况下创建一个新的空文件;它写入一个字符串;并关闭FileWriter。

如果你想写多行;你要么必须

  • 以附加模式使用FileWriter写入时(通过使用第二,对于FileWriter的构造与true布尔参数)
  • 改变你的方法取一个字符串列表,写所有的人立刻
+0

我喜欢这样的说法:“你的代码做它应该做的事情”这通常是正确的,但开发人员不会编写它应该完成的任务;) – AxelH

可以使用转义字符:

\b Insert a backspace in the text at this point. 
\n Insert a newline in the text at this point. 
\r Insert a carriage return in the text at this point. 

我建议你使用的资源尽量让Java来关闭该文件时,它会需要

public void writeToFile(String ins) { 

    String fileName= "file.txt"; 

    try (FileWriter fileWritter = new FileWriter(fileName, true)) { 

     fileWritter.write(ins + "\r\n"); 

    } catch (IOException ex) { 

    } 
} 

给这个方法的空字符串“”的文件中插入一个“回车”