Исключительная ситуация при создании экземпляра Path - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь создать экземпляр класса Path в определенной папке с помощью переменной среды. Вот мой код:

Path pathName = Paths.get(System.getenv("USER") + "/AGENDA");
System.out.println(chemin);
    if(Files.exists(pathName)) {
      System.out.println("Directory already exists!");
    }
    else 
    {
        try {
            Files.createDirectories(pathName);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("Directory newly created!");
    }

Когда я запускаю, консоль показывает:

/feujio/AGENDA
java.nio.file.AccessDeniedException: /feujio
at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
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)
at File.FilePaths.createPath(FilePaths.java:44)
at File.FilePaths.main(FilePaths.java:63)

Directory newly created!

Когда я не использую переменную окружения, она работает. Я не могу объяснить это поведение.

1 Ответ

0 голосов
/ 28 августа 2018

Javadoc из Files.createDirectory():

Создает новый каталог. Проверка существования файла и создание каталога, если он не существует, - это отдельная операция, которая является атомарной по отношению ко всем другим действиям файловой системы, которые могут повлиять на каталог. Метод createDirectories следует использовать там, где требуется сначала создать все несуществующие родительские каталоги.

[...]

Выдает IOException, если возникает ошибка ввода-вывода или родительский каталог не существует

NoSuchFileException - это IOException.

Это означает, что my-username не является существующим каталогом в текущем каталоге , каким бы ни был текущий каталог.

...