Files.write
和 Files.writeString
方法是将文本写入文件的简洁方便的方法。
try
{
Files.write (
Paths.get ( "/Users/My_UserName/Example.txt" ) ,
List.of( "Hello world" , Instant.now().toString() ) ,
StandardCharsets.UTF_8 ,
StandardOpenOption.WRITE ;
}
catch ( IOException e )
{
throw new RuntimeException ( e );
}
不幸的是,在文件存在之前,我无法让它第一次工作。我抛出异常:
java.nio.file.NoSuchFileException
我的目标始终是清除任何现有文件,编写一个新的文件。
我尝试添加
TRUNCATE_EXISTING
。
try
{
Files.write (
Paths.get ( "/Users/My_UserName/Example.txt" ) ,
List.of( "Hello world" , Instant.now().toString() ) ,
StandardCharsets.UTF_8 ,
StandardOpenOption.WRITE,
StandardOpenOption.TRUNCATE_EXISTING ); // <--- Combining Open-options.
}
catch ( IOException e )
{
throw new RuntimeException ( e );
}
但是当文件尚不存在时,这也会失败。
OpenOption
/StandardOpenOption
对象的组合来使用这些方便的 Files
方法?
因此,您想要的行为是使用 CREATE 和 TRUNCATE_EXISTING 选项与 WRITE 的效果。
try
{
Files.write (
Paths.get ( "/Users/My_UserName/Example.txt" ) ,
List.of ( "Hello world" , Instant.now ( ).toString ( ) ) ,
StandardCharsets.UTF_8 ,
StandardOpenOption.CREATE ,
StandardOpenOption.WRITE ,
StandardOpenOption.TRUNCATE_EXISTING
);
}
catch ( IOException e )
{
throw new RuntimeException ( e );
}
幸运的是,这是默认行为,正如您的 API 参考文献(如 Files.write :
)所记录的那样如果不存在任何选项,则此方法的工作方式与 CREATE 一样, TRUNCATE_EXISTING 和 WRITE 选项存在。
所以不要覆盖默认值 - 不要写,所以
try
{
Files.write (
Paths.get ( "/Users/My_UserName/Example.txt" ) ,
List.of ( "Hello world" , Instant.now ( ).toString ( ) ) ,
StandardCharsets.UTF_8 // <--- Omitting the 3 CREATE, WRITE, & TRUNCATE_EXISTING arguments.
);
}
catch ( IOException e )
{
throw new RuntimeException ( e );
}
顺便说一句,大多数时候我们也不需要指定字符集(我不记得在生产代码中见过它),所以除非你真的需要它:
Files.write (
Paths.get ( "/Users/My_UserName/Example.txt" ) ,
List.of( "Hello world" , Instant.now().toString() ) );