Почему оба файла.существует(...) и файлы.notExists(...)?
IMO, имеющий оба этих метода, является избыточным и действительно неясным! я не могу понять, почему оба этих метода разработаны в Files API ??
файлы.существовать.(.) возвращает true, если файл действительно существует, и false, если не существует или не имеющее разрешение. так Какого черта там файлы?notExist(..) ??
Oracle Docs говорит !Файлы.exists (...) не эквивалентен файлам.notExists(...)!? возможно, есть что-то, чего я не могу понять. хорошо!!
в чем преимущество использования notExist (), когда существует метод exist ()?
4 ответов
Я думаю, что javadoc довольно ясно, почему notExists
не является логическим дополнением exists
метод. Логическое дополнение B = !A
означает, что если A
- Это правда, B
ложно, и наоборот. Здесь это не так, поскольку оба метода могут возвращать false одновременно.
" где невозможно определить, существует ли файл или нет, то оба метода возвращают значение false."
вы предоставили ответ уже по ссылке.
The file is verified to exist. The file is verified to not exist. The file's status is unknown. This result can occur when the program does not have access to the file. If both exists and notExists return false, the existence of the file cannot be verified.
это означает, что если exists()
или notExists()
return true вы можете быть уверены в результате, если return false это может означать, что состояние не может быть определено. Поэтому используйте соответствующий метод, если вы хотите проверить наличие или отсутствие существования.
предположим, что вы хотите получить доступ к существующему файлу в некотором месте. Если вы хотите быть уверены, что доступ не завершится ошибкой из-за отсутствия файла, вы вызываете exists( path,... ) и переходить только если это возвращает true.
предположим, что вы хотите создать новый файл в каком-то месте. Если вы хотите быть уверены, что создание не завершится ошибкой из-за существования файла, вы вызываете notExists( path,... ) и переходить только если это возвращает true.
отметим, что отрицание существует для обработки второго случая не является гарантией таким же образом, как notExists() поставляет. И наоборот ! notExists в первом сценарии.
Files.exists(...)
и Files.notExists(...)
не являются избыточными, но дают различную информацию, как видно из кода ниже
LinkOption linkOptions[] = new LinkOption[] { LinkOption.NOFOLLOW_LINKS };
Path filePath = Paths.get("application.properties");
if (Files.exists(filePath, linkOptions))
{
System.out.println("file exists!");
} else if (Files.notExists(filePath, linkOptions))
{
System.out.println("file does not exist!");
} else
{
System.out.println("file's status is unknown!");
}