我正在使用以下函数将字符串写入File。字符串使用换行符进行格式化。
例如,text = "sometext\nsomemoretext\nlastword";
当我这样做时,我能够看到输出文件的换行符:
type outputfile.txt
然而,当我在记事本中打开文本时,我看不到换行符。一切都显示在一条线上。
为什么会这样。如何确保正确编写文本以便能够在记事本中正确查看(格式化)。
private static void FlushText(String text, File file)
{
Writer writer = null;
try
{
writer = new BufferedWriter(new FileWriter(file));
writer.write(text);
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (writer != null)
{
writer.close();
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
答案 0 :(得分:12)
在Windows上,按照惯例,新行表示为回车符,后跟换行符(CR + LF),即\r\n
。
文本编辑器经常用于 在两者之间转换文本文件 不同的换行格式;最现代的 编辑人员可以使用读写文件 至少不同的ASCII CR / LF 约定。 标准Windows 编辑器记事本不是其中之一 (虽然是写字板)。
如果将字符串更改为:
,记事本应正确显示输出text = "sometext\r\nsomemoretext\r\nlastword";
如果您想要一种独立于平台的方式来表示换行符,请使用System.getProperty("line.separator");
对于BufferedWriter
的特定情况,请使用bemace建议的内容。
答案 1 :(得分:9)
这就是为什么你应该使用BufferedWriter.newLine()
而不是硬编码你的行分隔符。它将负责为您当前正在处理的任何平台选择正确的版本。