Мне нужен действительный метод, чтобы проверить, представляет ли String
путь к файлу или каталогу. Какие допустимые имена каталогов в Android? Оказывается, имена папок могут содержать '.'
символов, так как же система понимает, есть ли файл или папка?
Проверьте, представляет ли путь файл или папку
- Как система понимает, есть ли файл или папка: Как система может не понять? Это там на диске в файловой системе и то одно, то другое. 13.10.2016
Ответы:
Предполагая, что path
является вашим String
.
File file = new File(path);
boolean exists = file.exists(); // Check if the file exists
boolean isDirectory = file.isDirectory(); // Check if it's a directory
boolean isFile = file.isFile(); // Check if it's a regular file
См. File
Javadoc.
Или вы можете использовать класс NIO Files
и проверить такие вещи:
Path file = new File(path).toPath();
boolean exists = Files.exists(file); // Check if the file exists
boolean isDirectory = Files.isDirectory(file); // Check if it's a directory
boolean isFile = Files.isRegularFile(file); // Check if it's a regular file
Чистое решение, оставаясь при этом с nio API:
Files.isDirectory(path)
Files.isRegularFile(path)
File
. Экономит память 06.07.2018 Пожалуйста, придерживайтесь nio API для выполнения этих проверок.
import java.nio.file.*;
static Boolean isDir(Path path) {
if (path == null || !Files.exists(path)) return false;
else return Files.isDirectory(path);
}
Система не может сказать вам, представляет ли String
file
или directory
, если он не существует в файловой системе. Например:
Path path = Paths.get("/some/path/to/dir");
System.out.println(Files.isDirectory(path)); // return false
System.out.println(Files.isRegularFile(path)); // return false
И для следующего примера:
Path path = Paths.get("/some/path/to/dir/file.txt");
System.out.println(Files.isDirectory(path)); //return false
System.out.println(Files.isRegularFile(path)); // return false
Итак, мы видим, что в обоих случаях система возвращает false. Это верно как для java.io.File
, так и для java.nio.file.Path
Чтобы программно проверить, представляет ли строка путь или файл, следует использовать такие методы API, как isFile(), isDirectory().
Как система понимает, есть ли файл или папка?
Я предполагаю, что записи файлов и папок хранятся в структуре данных и управляются файловой системой.
public static boolean isDirectory(String path) {
return path !=null && new File(path).isDirectory();
}
Прямо ответить на вопрос.
path
в моем примере этоString
. Почему вы не можете создать экземплярFile
? Обратите внимание, что это ничего не изменит в файловой системе. 08.10.2012root
может быть файлом. Файлы не обязательно имеют расширение.something
. 08.10.2012new File("/mnt/sdcard/arc/root").isDirectory()
и вернули false? Вы уверены, что это каталог и нет файла с таким же путем? 08.10.2012file.exists()
, иначе!file.isDirectory()
будет истинным, если на пути ничего не существует. То, что вы называете файлом, в Java API называется обычным файлом. Это связано с тем, что каталоги также являются файлами, но не являются обычными файлами. Как многие ответили, правильное решение - использоватьfile.isFile()
илиFiles.isRegularFile(path)
. 13.04.2019