无法使用PrintWriter将多行String打印到文件中

时间:2014-06-25 01:27:50

标签: java string printwriter

我正在尝试将多行字符串打印到PrintWriter中,但它无法识别不同的行。

我有这个字符串:“2 \ n0 0 1 string1 \ n0 2 1 string2”。

我希望文件中的文字是:

2
0 0 1 string1
0 2 1 string2

但实际上是:

20 0 1 string10 2 1string2

我的代码是:

 public void save(String str){
    try{
        PrintWriter out = new PrintWriter("file.txt");
        out.println(str);
        out.close();
        System.out.print(str);
    }catch(Exception e){System.out.println(e);}
}

它在控制台中打印好了。

我正在使用BlueJ进行编码。我的操作系统是W7,我刚用记事本打开文件。

解决!

使用“\ r \ n”而不只是“\ n”正常工作!

2 个答案:

答案 0 :(得分:3)

如果要在Windows上表示文字换行符,则需要使用\r\n,这是该平台的标准分隔符。

换句话说,您的原始字符串必须是

"2\r\n0 0 1 string1\r\n0 2 1 string2"

然而,这很快变得不可移植,所以你应该首先查询标准分隔符,然后用它来构造你的字符串。

String d = System.getProperty("line.separator");
String mystr = String.format("2%s0 0 1 string1%s0 2 1 string2", d, d)

此外,根据this answer,我们可以使用%n格式说明符来避免调用getProperty()

String mystr = String.format("2%n0 0 1 string1%n0 2 1 string2")

答案 1 :(得分:1)

来自PrintWriter.println() javadoc,

  

通过写行分隔符字符串来终止当前行。行分隔符字符串由系统属性line.separator定义,不一定是单个换行符('\ n')。

所以,我认为你可以使用 -

try{
  PrintWriter out = new PrintWriter("file.txt");
  for (String s : str.split("\n")) {
    out.println(s);
  }
  out.close();
  System.out.print(str);
}catch(Exception e){System.out.println(e);}