Java N/IO中的行分隔符?

Java N/IO中的行分隔符?,java,nio,Java,Nio,使用java.nio.file写入txt文件时,如何插入新行? 以下代码生成一个txt文件,其中有一行ABCDEF,而不是两行ABC和DEF: public static void main(String args[]) throws IOException { final Path PATH = Paths.get("test.txt"); String test = "ABC\nDEF"; Files.write(PATH, test.getB

使用
java.nio.file
写入txt文件时,如何插入新行? 以下代码生成一个txt文件,其中有一行
ABCDEF
,而不是两行
ABC
DEF

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开始,您应该使用而不是硬编码
\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”)
()。

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

String test=“ABC”+System.lineSeparator()+System.lineSeparator()+“DEF”


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

使用另一个超负荷的
文件。写入
,它需要一个
Iterable
字符串(
CharSequence
,确切地说),并使用系统行分隔符将每个字符串写入自己的行。如果您已经将行存储在集合中,这将非常有用

Files.write(PATH, Arrays.asList("ABC","DEF"),StandardCharsets.UTF_8);
(最好指定字符集,而不是依赖默认值,这是在不使用字符集的情况下使用
String.getBytes()
时发生的情况)

或者使用
String.format

String test = String.format("ABC%nDEF");
Formatter
(它使用
String.format
%n
解释为系统行分隔符


这种方法一直向后兼容到Java1.5。但是当然,
Files
类在Java7之前并不存在。

假设Java7,这仍然不能保证堆栈溢出。反正我还是投了赞成票。@Andreas我编辑了我的帖子,为Java添加了一个解决方案,OP使用了
文件
类,因此可以安全地假设Java 7。不,它不是。它生成一个包含ABC、换行符和DEF的文件。在某些程序中,它可能读作一行,但Java会读作两行。