Проверка наличия файла или каталога в Java
5 ответов
!Files.exists()
возвращает:
-
true
если файл не существует или его существование не может быть определено -
false
если существует файл
Files.notExists()
возвращает:
-
true
если файл не существует -
false
Если файл существует и его существование не может быть определено
как мы видим из файлы.существует обратный результат:
TRUE if the file exists;
FALSE if the file does not exist or its existence cannot be determined.
и файлы.notExists обратный результат:
TRUE if the file does not exist;
FALSE if the file exists or its existence cannot be determined
если !Files.exists(path)
возвращение TRUE
означает, что он не существует или существование не может быть определено (2 возможности) и Files.notExists(path)
возвращение TRUE
означает, что он не существует (только 1 возможность).
вывод !Files.exists(path) != Files.notExists(path)
или 2 possibilities not equals to 1 possibility
(см. объяснение выше про возможности).
глядя в исходном коде на различия, они оба делают то же самое с 1 большой разницей. The notExist(...)
метод имеет дополнительное исключение для перехвата.
Exist:
public static boolean exists(Path path, LinkOption... options) {
try {
if (followLinks(options)) {
provider(path).checkAccess(path);
} else {
// attempt to read attributes without following links
readAttributes(path, BasicFileAttributes.class,
LinkOption.NOFOLLOW_LINKS);
}
// file exists
return true;
} catch (IOException x) {
// does not exist or unable to determine if file exists
return false;
}
}
Нет:
public static boolean notExists(Path path, LinkOption... options) {
try {
if (followLinks(options)) {
provider(path).checkAccess(path);
} else {
// attempt to read attributes without following links
readAttributes(path, BasicFileAttributes.class,
LinkOption.NOFOLLOW_LINKS);
}
// file exists
return false;
} catch (NoSuchFileException x) {
// file confirmed not to exist
return true;
} catch (IOException x) {
return false;
}
}
в результате различия следующие:
!exists(...)
возвращает файл не существует, еслиIOException
выбрасывается при попытке получить файл.notExists(...)
возвращает файл как несуществующий, убедившись, что конкретныйIOException
subexceptionNoSuchFileFound
не выдается, и что он не subexception наIOException
вызывая не найден результат
С Oracle docs of notExists
.
обратите внимание, что этот метод не является дополнением метода exists. где невозможно определить, существует ли файл или нет, то оба метода возвращают false. ...
мой подсветка.
вы можете просто указать абсолютный путь, если каталог/каталоги не выходит, он создаст каталог/каталоги.
private void createDirectoryIfNeeded(String directoryName)
{
File theDir = new File(directoryName);
if (!theDir.exists())
theDir.mkdirs();
}