【问题标题】:Newlines in string not writing out to file字符串中的换行符未写入文件
【发布时间】:2010-11-11 02:42:56
【问题描述】:

我正在尝试编写一个程序来处理从文件中读取的 unicode 字符串。我想到了两种方法——一种是读取包含换行符的整个文件,执行几个正则表达式替换,然后将其写回另一个文件;另一个我逐行读取文件并匹配各个行并替换它们并将它们写出来。我无法测试第一种方法,因为字符串中的换行符没有作为换行符写入文件。下面是一些示例代码来说明:

String output = "Hello\nthere!";
BufferedWriter oFile = new BufferedWriter(new OutputStreamWriter(
    new FileOutputStream("test.txt"), "UTF-16"));

System.out.println(output);
oFile.write(output);
oFile.close();

打印语句输出

你好
那里!

但文件内容是

你好!

为什么我的换行符没有写入文件?

【问题讨论】:

  • 记事本无法正确显示仅包含 \n 的文本文件。
  • 用\r\n看看它是否仍然可以
  • 是的,我刚刚尝试过,它有效。这很奇怪,出于某种原因,我记得记事本至少会显示一个非字符字形,如果它本身只看到一个 0x0A,但我猜不是。

标签: java string unicode file-io


【解决方案1】:

你应该尝试使用

System.getProperty("line.separator")

这是一个未经测试的例子

String output = String.format("Hello%sthere!",System.getProperty("line.separator"));
BufferedWriter oFile = new BufferedWriter(new OutputStreamWriter(
    new FileOutputStream("test.txt"), "UTF-16"));

System.out.println(output);
oFile.write(output);
oFile.close();

我无法测试第一个 方法,因为在 字符串不写为换行符 文件

你确定吗?您能否发布一些显示该特定事实的代码?

【讨论】:

  • 部分原因是我只知道如何一次读取一行文件,所以我提供的换行符被写出,但仅作为LF,而不是 CRLF,并且在记事本中没有正确显示,正如 kd304 指出的那样。
【解决方案2】:

使用 System.getProperty("line.separator") 获取平台特定的换行符。

【讨论】:

    【解决方案3】:

    考虑使用 PrintWriters 来获取已知的 println 方法,例如System.out

    【讨论】:

      猜你喜欢
      • 2019-10-09
      • 2014-04-18
      • 2021-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-23
      • 1970-01-01
      相关资源
      最近更新 更多