10

我在使用 Java 7 的Files类时遇到了一个看似奇怪的问题。我想在开始编写之前确保我的目录和文件存在以避免 a FileNotFoundException,并且根据JavadocscreateDirectory检查“文件是否存在以及如果目录不存在则创建目录”

那么如果它先检查,当目录已经存在时,为什么我对以下代码有问题?

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)
4

4 回答 4

27

文档

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

“通过首先创建所有不存在的父目录来创建目录。与 createDirectory 方法不同,如果由于目录已存在而无法创建目录,则不会引发异常。”

也许你可以用那个

于 2013-04-23T21:13:04.323 回答
1

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

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

于 2013-04-23T21:09:48.127 回答
0

Java 7文档已经提到你会得到一个FileAlreadyExistsException. 那么问题似乎是什么?

于 2013-04-23T21:06:25.160 回答
0
if (!Files.isDirectory(Paths.get(dirpath))) {
    System.out.println("Output Files parent path does not exist:"+dirpath);
    File file = new File(dirpath);
    if (!file.exists()) {
        if (file.mkdir()) {
            System.out.println("Output files directory is created!");
        } else {
            System.out.println("Failed to create output directory!");
        }
    }
}

先检查再创建!!

于 2018-09-17T14:12:29.873 回答