在生产Linux环境中,我收到Files.createDirectoriesapi的NoSuchFileException。
我已经检查了java文档中的Files.createDirectories,它本质上不会抛出此异常。
我需要知道在什么情况下我们会得到Files.createDirectoriesAPI的此错误。
stackTrace
-----------
java.nio.file.NoSuchFileException: /folder1/folder2/folder abc/ABC-UVW XYZ
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:86)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
at sun.nio.fs.UnixFileSystemProvider.createDirectory(UnixFileSystemProvider.java:384)
at java.nio.file.Files.createDirectory(Files.java:674)
at java.nio.file.Files.createAndCheckIsDirectory(Files.java:781)
at java.nio.file.Files.createDirectories(Files.java:767)
代码
if(!file.getParentFile().exists()) {
Files.createDirectories(Paths.get(file.getParent()));
//Files.createDirectories() should create all non existent parent directories but instead it throws NoSuchFileException.
//......other code
}
1条答案
按热度按时间hvvq6cgz1#
下面的代码抛出了
FileAlreadyExistsException
的Files.createDirectories
:这是javadoc所期望的行为;它失败到创建一个目录因为一个文件(
C
)与相同的名字已经存在.您可以通过删除
FileSystemException.getFile()
提供的文件并再次尝试Files.createDirectories
来处理它。然而,下面的代码抛出了
NoSuchFileException
:因为
D
的父代是一个文件。您可以通过删除
getFile()
提供的文件的父文件并再次尝试Files.createDirectories
来进行类似的处理。这很奇怪,因为它没有在javadoc中解释。我希望
FileAlreadyExistsException
与第一个示例中的相同。例外之间也存在不一致性;
FileAlreadyExistsException.getFile()
使用相对路径,而NoSuchFileException.getFile()
使用绝对路径。所以在处理异常时要考虑到这一点。