Я немного играю с новыми функциями ввода-вывода Java 7, на самом деле я пытаюсь получить все файлы XML из папки. Но это вызывает исключение, когда папка не существует, как я могу проверить, существует ли папка с новым IO?
public UpdateHandler(String release) {
log.info("searching for configuration files in folder " + release);
Path releaseFolder = Paths.get(release);
try(DirectoryStream<Path> stream = Files.newDirectoryStream(releaseFolder, "*.xml")){
for (Path entry: stream){
log.info("working on file " + entry.getFileName());
}
}
catch (IOException e){
log.error("error while retrieving update configuration files " + e.getMessage());
}
}
DirectoryStream
, не говоря уже о том, что вы перебираете записи в папке.Ответы:
Использование
java.nio.file.Files
:При желании вы можете передать
LinkOption
значения этого метода :Есть также метод
notExists
:источник
Files.exists(path)
иFiles.notExists(path)
могут возвращать false одновременно! Это означает, что Java не может определить, существует ли путь на самом деле.!Files.exists(path)
иFiles.notExists(path)
не 100% одно и то же. Когда Java не может определить, существует ли файл, первый вернется,true
а второй вернетсяfalse
.Довольно просто:
И если вы хотите быть уверены, что это каталог:
источник
if(f.isDirectory()) {...}
было бы достаточно, так как он проверяет также существование.java.io.file
не является частью «новых функций ввода-вывода Java 7», на которые ссылается OP.java.nio.file
Пакет, который был введен в Java 7, предлагаетPaths
иFiles
классы. Другие ответы здесь правильно объясняют, как использовать эти новые классы для решения проблемы OP.Чтобы проверить, существует ли каталог с новым IO:
isDirectory
возвращает,true
если файл является каталогом;false
если файл не существует, не является каталогом, или невозможно определить, является ли файл каталогом или нет.Смотрите документацию .
источник
Вам нужно преобразовать свой Путь в
File
и проверить на существование:источник
Создайте файл из строки каталога вашей папки
и использовать метод существует.
Если вы хотите создать папку, вы должны использовать mkdir ()
источник
Нет необходимости отдельно вызывать
exists()
метод, так какisDirectory()
неявно проверяет, существует ли каталог или нет.источник
источник
источник
Мы можем проверить файлы и их папки.
источник
Из SonarLint , если у вас уже есть путь, используйте
path.toFile().exists()
вместо того,Files.exists
чтобы повысить производительность.Пример несовместимого кода:
Совместимое решение:
источник