Java N/IO 中的行分隔符?

Line separator in Java N/IO?

如何在使用 java.nio.file 写入 txt 文件时插入新行? 以下代码生成一个包含一行 ABCDEF 的 txt 文件,而不是单独的两行 ABCDEF:

public static void main(String args[]) throws IOException {
        final Path PATH = Paths.get("test.txt");
        String test = "ABC\nDEF";
        Files.write(PATH, test.getBytes());
    }

从 Java 7 开始,您应该使用 System.lineSeparator() 而不是硬编码 \n,因为行分隔符实际上取决于代码 运行 的机器。

public static void main(String args[]) throws IOException {
    final Path PATH = Paths.get("test.txt");
    String test = "ABC" + System.lineSeparator() + "DEF";
    Files.write(PATH, test.getBytes());
}

如果您仍在使用 Java 6 或更早版本,则可以使用 System.getProperty("line.separator") (see Oracle docs) 实现相同的效果。

补充@Tunaki,如果你想要两行,只需插入另一行:

String test = "ABC" + System.lineSeparator() + System.lineSeparator() + "DEF";

使用系统行分隔符的其他选项:

使用 Files.write 的另一个重载,它需要一个 Iterable 字符串(准确地说是 CharSequence),并使用系统行分隔符将每个字符串写在自己的行上。如果您已经将这些行存储在一个集合中,这将非常有用。

Files.write(PATH, Arrays.asList("ABC","DEF"),StandardCharsets.UTF_8);

(最好指定字符集而不是依赖默认值,这是在不使用字符集的情况下使用 String.getBytes() 时发生的情况)。

或使用String.format:

String test = String.format("ABC%nDEF");

FormatterString.format 使用)将 %n 解释为系统行分隔符。

这种方法一直向后兼容 Java 1.5。但是当然, Files class 在 Java 7.

之前是不存在的