#java #path #nio
#java #путь #nio
Вопрос:
Как я могу создать Path
файл, который гарантированно не существует?
Я думал об использовании «невозможного» имени пути, например:
Path path = Path.of("/nonexistent");
Но кто-то может создать такой файл, что приведет к сбою моего кода.
Обновить
Я написал метод, который принимает Path
, а затем пытается прочитать из базового файла, и теперь я пишу модульный тест, чтобы убедиться, что я правильно обработал несуществующие файлы.
Я хочу сделать свой модульный тест надежным, не рискуя случайными сбоями.
Комментарии:
1. Путь — это просто путь. Мы можем использовать
Files::exists
и/ илиFiles:notExists
, чтобы проверить, существует ли файл в соответствии с даннымPath
.2. Для полноты картины: каталог в этом контексте считается файлом.
3. Ваш вопрос неясен. Какова будет его цель? Будет ли это предшествовать операции записи? Пожалуйста, укажите некоторые варианты использования.
4. Если что-то является допустимым путем, нет гарантии, что оно не существовало в прошлом или не будет существовать в будущем. Единственное, что вы можете сделать, это проверить, не существует ли путь прямо сейчас. Чего вы пытаетесь достичь? Это звучит как проблема X-Y.
Ответ №1:
Создайте временный каталог для теста, тогда любой путь к файлу в этом каталоге не будет существовать — используйте это для своих тестов.
Ответ №2:
Я нашел возможное решение:
Я бы не использовал это, если бы от этого зависела безопасность, но для целей тестирования я считаю, что это почти гарантирует, что файл не существует.
Path path = Files.createTempFile(null, null);
Files.delete(path);
Комментарии:
1. Вы, конечно, могли бы добавить
Assertions.assertTrue(Files.notExists(path));
перед своим вызовом, но я думаю, вы правы, предполагая, что это не нужно — какFiles.delete
должно вызывать исключение, если не удается удалить временный файл.