Java N / IO中的行分隔符?
使用java.nio.file
写入txt文件时如何插入新行? 下面的代码生成一个带有一行ABCDEF
的txt文件,而不是两行单独的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开始,您应该使用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")
实现相同的function( 请参阅Oracle文档 )。
使用系统行分隔符的其他选项:
使用另一个Files.write
重载,它需要一个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
解释为系统行分隔符。
这种方法可以向后兼容,直到Java 1.5。 但是,当然,在Java 7之前, Files
类并不存在。
补充@Tunaki,如果你想要两行,只需插入另一行:
String test =“ABC”+ System.lineSeparator()+ System.lineSeparator()+“DEF”;
- 如何指示Maven忽略我的main / resources / persistence.xml以支持test / …?
- 如何在java中覆盖服务提供者
- Hibernate SQL查询结果映射/转换为对象/类/ Bean
- 是否可以从JRuby创建Java类并在Java中使用它们?
- Session.getInstance的Java Mail问题
- Hibernate 5.2.7 – java.lang.NoSuchMethodError:org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava / util / Map;
- 如何在用户输入的字符串中获取“?”之间的内容? Java的
- 为什么本机String getBytes方法比自定义实现的getBytesFast慢?
- 什么时候使用instanceof正确的决定?