使用
createNewFile(),仅当文件尚不存在时,它会自动创建文件。
如果创建了文件,则该名称有效,并且不会破坏现有文件。然后,您可以打开文件,并通过
FileChannel.transferXXX操作将数据从一个有效地复制到另一个。
要记住的重要一点是,通常,检查和创建应该是原子的。如果首先检查操作是否安全,然后作为一个单独的步骤执行操作,则此时的条件可能已更改,从而使操作不安全。
可以在以下相关文章中获得更多的思考:“Java中的移动/复制操作”。
更新:
从这个答案开始,就引入了NIO.2 API,它增加了与文件系统的更多交互。
假设您有一个交互式程序,并且想在每次按键后验证文件是否可能有效。例如,您可能只想在条目有效时才启用“保存”按钮,而不是在按“保存”后弹出错误对话框。创建并确保删除我上面的建议所需要的许多不必要的文件似乎是一团糟。
使用NIO.2,您无法创建
Path包含文件系统非法字符的实例。
InvalidPathException尝试创建时会引发An
Path。
但是,没有API可以验证由有效字符组成的非法名称,例如Windows上的“
PRN”。作为一种解决方法,实验表明,在尝试访问属性时(
Files.getLastModifiedTime()例如,使用),使用非法文件名会引发明显的异常。
如果为确实存在的文件指定合法名称,则不会例外。
如果为不存在的文件指定合法名称,则会引发
NoSuchFileException。
如果指定非法名称,
FileSystemException则会引发。
但是,这似乎很繁琐,在其他操作系统上可能并不可靠。



