Java:BufferedWriter跳过换行符

时间:2010-11-01 06:12:21

标签: java

我正在使用以下函数将字符串写入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();
            }
        }
    }

2 个答案:

答案 0 :(得分:12)

在Windows上,按照惯例,新行表示为回车符,后跟换行符(CR + LF),即\r\n

来自Newline wikipedia page

  

文本编辑器经常用于   在两者之间转换文本文件   不同的换行格式;最现代的   编辑人员可以使用读写文件   至少不同的ASCII CR / LF   约定。 标准Windows   编辑器记事本不是其中之一   (虽然是写字板)。

如果将字符串更改为:

,记事本应正确显示输出
text = "sometext\r\nsomemoretext\r\nlastword";

如果您想要一种独立于平台的方式来表示换行符,请使用System.getProperty("line.separator");对于BufferedWriter的特定情况,请使用bemace建议的内容。

答案 1 :(得分:9)

这就是为什么你应该使用BufferedWriter.newLine()而不是硬编码你的行分隔符。它将负责为您当前正在处理的任何平台选择正确的版本。