Spec-Zone .ru
спецификации, руководства, описания, API
|
У Вас есть a Path
экземпляр, представляющий файл или каталог, но тот файл, существует на файловой системе? Действительно ли это читаемо? Перезаписываемый? Исполнимая программа?
Методы в Path
class является синтаксическим, означая, что они работают на Path
экземпляр. Но в конечном счете следует получить доступ к файловой системе, чтобы проверить что деталь Path
существует, или не существует. Можно сделать так с exists(Path, LinkOption...)
и notExists(Path, LinkOption...)
!Files.exists(path)
не эквивалентно Files.notExists(path)
. Когда Вы тестируете существование файла, три результата возможны:
Если оба exists
и notExists
возвратиться false
, существование файла не может быть проверено.
Чтобы проверить, что программа может получить доступ к файлу как необходимый, можно использовать isReadable(Path)
isWritable(Path)
isExecutable(Path)
Следующий фрагмент кода проверяет, что определенный файл существует и что у программы есть возможность выполнить файл.
Path file = ...; boolean isRegularExecutableFile = Files.isRegularFile(file) & Files.isReadable(file) & Files.isExecutable(file);
TOCTTOU
(объявленный TOCK-также). Когда у Вас есть файловая система, которая использует символьные ссылки, возможно иметь два различных пути, которые определяют местоположение того же самого файла. isSameFile(Path, Path)
Path p1 = ...; Path p2 = ...; if (Files.isSameFile(p1, p2)) { // Logic when the paths locate the same file }