WedX - журнал о программировании и компьютерных науках

Проверьте, представляет ли путь файл или папку

Мне нужен действительный метод, чтобы проверить, представляет ли String путь к файлу или каталогу. Какие допустимые имена каталогов в Android? Оказывается, имена папок могут содержать '.' символов, так как же система понимает, есть ли файл или папка?


  • Как система понимает, есть ли файл или папка: Как система может не понять? Это там на диске в файловой системе и то одно, то другое. 13.10.2016

Ответы:


1

Предполагая, что 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
08.10.2012
  • Как я уже упоминал в своем вопросе, у меня есть только строки и нет экземпляров файлов, и я не могу их создать. 08.10.2012
  • path в моем примере это String. Почему вы не можете создать экземпляр File? Обратите внимание, что это ничего не изменит в файловой системе. 08.10.2012
  • Вот конкретный пример: я пытаюсь создать файл, используя следующий путь: /mnt/sdcard/arc/root, и для isDirectory() он возвращает false. В чем проблема? 08.10.2012
  • @Egor Трудно сказать, так как у меня нет Android-устройства. Обратите внимание, что root может быть файлом. Файлы не обязательно имеют расширение .something. 08.10.2012
  • Поэтому я предполагаю, что ваше решение не работает. root — это каталог, но, взяв только его имя и создав экземпляр File, я не могу сказать, является ли он файлом или каталогом. 08.10.2012
  • @Egor Итак, вы пробовали: new File("/mnt/sdcard/arc/root").isDirectory() и вернули false? Вы уверены, что это каталог и нет файла с таким же путем? 08.10.2012
  • На самом деле это просто простой путь, и моя настоящая проблема заключается в том, чтобы узнать, как я могу проверить, относится ли он к файлу или к папке. 08.10.2012
  • @Egor На самом деле это просто дорожка Что ты имеешь в виду? Не могли бы вы ответить на вопросы, которые я задал в предыдущем комментарии? 08.10.2012
  • isDirectory() вернет true, только если файл существует и является каталогом. Если файл, указанный в пути, не существует, он также возвращает false. Таким образом, isDirectory() вернет false, если указанный путь не существует или существует, но не является каталогом... Надеюсь, это поможет.. 09.10.2012
  • Спасибо, мне нужно было проверить, является ли моя строка файлом, но, согласно документам, метод isFile() только проверяет, является ли строка обычным файлом, поэтому в итоге я использовал !isDirectory(). 06.03.2017
  • @instanceof, вам нужно также проверить file.exists(), иначе !file.isDirectory() будет истинным, если на пути ничего не существует. То, что вы называете файлом, в Java API называется обычным файлом. Это связано с тем, что каталоги также являются файлами, но не являются обычными файлами. Как многие ответили, правильное решение - использовать file.isFile() или Files.isRegularFile(path). 13.04.2019

  • 2

    Чистое решение, оставаясь при этом с nio API:

    Files.isDirectory(path)
    Files.isRegularFile(path)
    
    16.12.2015
  • Это лучший ответ, если вы перебираете список каталогов. Здесь вы используете статический класс для запуска этих проверок, а не создаете каждый раз новый объект File. Экономит память 06.07.2018
  • Не отвечает на заданный вопрос. Files.isDirectory() не принимает строку. 06.02.2019

  • 3

    Пожалуйста, придерживайтесь nio API для выполнения этих проверок.

    import java.nio.file.*;
    
    static Boolean isDir(Path path) {
      if (path == null || !Files.exists(path)) return false;
      else return Files.isDirectory(path);
    }
    
    14.01.2015
  • Зачем давать ответ на Scala, когда вопрос требует кода Java (см. теги)? 22.10.2015
  • @Baz Потому что Scala ковариантна с Java ... шучу :-D. Я обновил ответ. 23.10.2015
  • Вы можете создать временный каталог, создать там каталоги и файлы. Затем используйте код выше и подтвердите. С одной стороны, используйте обычные файлы/каталоги, в противном случае используйте некоторый фиктивный путь элемента, который не создается. 11.10.2018

  • 4

    Система не может сказать вам, представляет ли 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

    25.09.2017

    5

    Чтобы программно проверить, представляет ли строка путь или файл, следует использовать такие методы API, как isFile(), isDirectory().

    Как система понимает, есть ли файл или папка?

    Я предполагаю, что записи файлов и папок хранятся в структуре данных и управляются файловой системой.

    08.10.2012

    6
    public static boolean isDirectory(String path) {
        return path !=null && new File(path).isDirectory();
    }
    

    Прямо ответить на вопрос.

    06.02.2019
    Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]