【问题标题】:why the other part is not printed in the next line?为什么另一部分没有打印在下一行?
【发布时间】:2011-08-12 10:18:05
【问题描述】:

来自以下代码:

import java.io.*;

class fileTester {
  public static void main( String args[]) throws IOException {
    String string = "Suhail" + "\n" + "gupta";
    FileOutputStream fos = new FileOutputStream( new File("break.txt"));
    byte[] data = string.getBytes();
    fos.write( data );
    fos.close();
  }
}

我预计输出是:

苏海尔

古普塔

int 创建的文件(即两个字符串都在一个新行中),但输出在一行中。 Suhail gupta

当我在两个字符串之间使用\n 字符时,为什么会这样?

【问题讨论】:

    标签: java string file


    【解决方案1】:

    写入文件时不应硬编码换行符。请改用特定于操作系统的换行字符串:

    String newline = System.getProperty("line.separator");
    

    另外,与其使用 FileOutputStream 将原始字节写入文本文件,为什么不将其包装在 PrintStream 对象中,以便您可以轻松地使用 println(...) 为您执行换行符?

    【讨论】:

    • 当我写 System.out.println("A" + "\n" + "B") AB 时会打印在新行上。 \n 是如何在这里工作而不是在给出的代码中?
    • Suhail:当您使用 System.out“打印”时...您正在打印到与操作系统无关的控制台,而在另一个控制台上您正在打印到与操作系统无关的文件。
    • 我无法理解您所说的操作系统 不可知 是什么意思
    • 无论在什么操作系统 (OS) 上运行,Java 本身的工作方式都应该几乎相同。因此,Java 不应该关心存在哪个操作系统——它(在大多数情况下)与操作系统无关。但是,当您写入文本文件时,文件的格式将取决于操作系统的要求,而这是 Java 无法控制的。所以这里操作系统很重要。
    【解决方案2】:

    我猜你正在使用记事本查看文件。

    行尾字符因系统而异。更高级的文本编辑器(例如 Notepad++)会正确显示它,因为它会尝试找到准备此文件的系统。

    通常,不要总是使用“\n”,而是使用

     java.lang.System.getProperties().get("line.separator")
    

    【讨论】:

      【解决方案3】:

      如果你的操作系统是windows而不是你必须使用\r\n换行,只有\n在windows中不起作用,你可以找到更多细节here

      【讨论】:

        【解决方案4】:

        这是因为对于 Windows,新行是:\r\n。在其他操作系统 \n 会很好

        【讨论】:

          【解决方案5】:

          当您需要换行时,最佳做法是使用系统换行字符串,在您想要换行的地方放入 System.getProperty("line.separator")。

          这样,它将为您正在制作文件的平台(windows/mac/linux)使用正确的新行。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2022-01-05
            • 2022-01-26
            • 2021-09-28
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多