2013-04-23 40 views
6

我有一个看似奇怪的问题,使用Java 7的Files类。 我想确保我的目录和存在的文件之前,我开始写,以避免FileNotFoundException,并根据JavadocscreateDirectory检查“文件的存在和目录的创建,如果它不存在”Files.createDirectory():FileAlreadyExistsException

因此,如果它首先检查,为什么当目录已经存在时,下面的代码有问题?

private void writeFile() throws IOException { 
    // Make sure parent directory and file are ready 
    File file = "mydirectory/my.file"; 
    File parent = file.getParentFile(); 
    if (parent != null) 
     Files.createDirectory(parent.toPath()); // Why do I get FileAlreadyExistsException? =[ 
    Files.createFile(file.toPath()); 

    // Do some file writing stuff! 
} 

我知道我可以只给一个“如果没有文件存在则创建”的东西,但我认为这种方法的主旨就是要照顾一切,对我!

异常数据:

java.nio.file.FileAlreadyExistsException: mydirectory 
at sun.nio.fs.WindowsException.translateToIOException(Unknown Source) 
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) 
at sun.nio.fs.WindowsException.rethrowAsIOException(Unknown Source) 
at sun.nio.fs.WindowsFileSystemProvider.createDirectory(Unknown Source) 
at java.nio.file.Files.createDirectory(Unknown Source) 
+0

你可以发布异常吗?并告诉我它抛出哪一行? – Dima 2013-04-23 21:05:45

回答

15

documentation

public static Path createDirectories(Path dir, FileAttribute<?>... attrs) throws IOException 

“先建立所有不存在的父目录创建一个目录。不同的是createDirectory方法,如果由于目录已经存在而无法创建目录,则不会引发异常。“

也许你可以使用那一个

+0

是的,这工作 - 但现在'createFile'引发异常;有没有类似的东西呢?没有'createFiles'这样的方法。 – CJxD 2013-04-23 21:23:05

+0

拧这个,我只是想用file.exists() – CJxD 2013-04-23 21:30:37

0

的Java 7 documentation已经提到,你会得到一个FileAlreadyExistsException。那么问题似乎是什么?

+0

所以它没有注意到。但是,为什么当它从描述中推断出,如果目录已经存在,它应该快乐地继续下去? – CJxD 2013-04-23 21:17:33

+0

不,没有推论。抛出异常意味着它不会继续。可能你不在乎,但别人可能会。 – 2013-04-23 21:25:26

+0

我误解了文档 - 我认为它不会在意。 – CJxD 2013-04-23 21:26:40

1

Files.createDirectory实际上创建目录 - >“创建一个新目录....应该使用createDirectories方法来首先创建所有不存在的父目录。”

如果你想确保该文件存在,只需要使用file.exists()方法

+0

这正是我想要做的,创建所有不存在的目录。 – CJxD 2013-04-23 21:14:14

相关问题