Перейти к содержимому

Как проверить есть ли определенная папка на диске java

  • автор:

Файлы и директории, класс File

Класс File пакета java.io используется для управления информацией о файлах и каталогах. На уровне операционной системы файлы и каталоги имеют существенные отличия, но в Java они описываются одним классом File. Каталог в Java трактуется как обычный файл, но с дополнительным свойством — списком имен файлов, который можно просмотреть с помощью метода list.

В зависимости от назначения объект File — файл или каталог, можно использовать один из конструкторов для создания объекта:

Примеры создания объектов File

Свойства и методы класса File

Для определения стандартных свойств файла в классе File имеются различные методы. Однако класс File несимметричен, т.е. методы определения свойств объекта существуют, но соответствующие функции для изменения этих свойств отсутствуют.

Функции Описание
String getName() Наименование файла или каталога.
String getParent() Наименование родительского каталога.
long length() Функция определения размера файла в байтах.
String getAbsolutePath() Функция определения абсолютного пути файла или каталога.
boolean delete() Удаления файла или каталога.
boolean exists() Проверка существования файла или каталога.
boolean isDirectory() Проверка, является ли данный объект каталогом.
boolean isFile() Проверка, является ли данный объект файлом.
long lastModified() Функция определения даты последней модификации файла.
boolean canRead() Проверка, можно ли читать данные из файла.
boolean canWrite() Проверка, можно ли записывать данные в файл.
boolean isHidden() Проверка, являются ли каталог или файл скрытыми.
String[] list() Чтение массива наименований файлов и подкаталогов.
File[] listFiles() Чтение массива файлов и подкаталогов.
boolean mkdir() Создание нового каталога.
boolean renameTo(File dest) Переименовывание файла или каталога.

В следующем примере открываем файл "d:/test/MyFile.txt" (Windows) и извлекаем его характеристики:

В консоли будет отпечатана следующая информация:

Интерфейс FileFilter

Класс File включает метод, позволяющий прочитать список только определенных файлов.

В отличие от одноименного метода, но без параметра, данный метод отбирает только те файлы каталога, которые удовлетворяют определенному условию. Параметр filter предназначен для задания этого условия. При этом тип параметра FileFilter — это не класс, а интерфейс, который имеет всего один метод, возвращающий true, если файл удовлетворяет определенным условиям, и false в противном случае.

Метод listFiles будет вызывать метод accept для каждого файла в каталоге, и те, для которых accept вернет true, будут включены в результирующий список. Остальные будут проигнорированы.

Для использования FileFilter необходимо создать объект и определить в нем соответствующий метод accept.

Пример использования фильтра FileFilter

Чтение содержимого файла FileInputStream

Для чтения содержимого файла можно использовать класс FileInputStream, который является наследником класса InputStream и реализует все его методы. Конструктор класса FileInputStream :

Если файл не может быть открыт то генерируется исключение FileNotFoundException.

Пример считывания данных из файла и вывод содержимого в консоль:

Данные файла можно считать в массив байтов :

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

Пример использования FileInputStream для чтения файла свойств в кодировке UTF-8:

Файл свойств "data.properties" в кодировке UTF-8:

Запись в файл FileOutputStream

Класс FileOutputStream, является производным от класса OutputStream, поэтому наследует всю его функциональность.

Пример записи строки в файл:

Для создания объекта FileOutputStream используется конструктор, принимающий в качестве параметра путь к файлу для записи. Для записи строки ее сначала переводим в массив байт и с помощью метода write строка записывается в файл. Необязательно записывать весь массив байтов. Используя перегрузку метода write(), можно записать и одиночный байт:

Пример перезаписи содержимого из одного файла в другой:

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

Name already in use

java_notes / IO / java.io.File.md

  • Go to file T
  • Go to line L
  • Copy path
  • Copy permalink
  • Open with Desktop
  • View raw
  • Copy raw contents Copy raw contents

Copy raw contents

Copy raw contents

Класс предназначен для манипуляции файлами и каталогами, чтения и установки атрибутов. Файлы можно создавать, удалять, переименовывать и т.п..

Методы анализа файла

Метод Описание
boolean isDirectory() Является ли «объект файла» директорией
boolean isFile() Является ли объект файлом
Ьoolean isHidden() Является ли файл скрытым
long length() Возвращает размер/длину файла в байтах.
boolean exists() Возвращает true, если файл с таким именем существует на диске компьютера.
String getAbsolutePath() Возвращает полный путь файла со всеми поддиректориями.
String getCanonicalPath() Возвращает канонический путь файла. Например, преобразовывает путь «c:/dir/dir2/../a.txt» к пути «c:/dir/a.txt»
String getName() Возвращает только имя файла, без пути.
String getParent() Возвращает только путь (директорию) к текущему файлу, без самого имени.
File getParentFile() Возвращает только путь (директорию) к текущему файлу как объект File
Метод Описание
boolean createNewFile() Создает файл. Если такой файл уже был, возвращает false.
boolean delete() Удаляет файл объекта на диске. Если объект – директория, то только, если в ней нет файлов.
void deleteOnExit() Добавляет файл в специальный список файлов, которые будут автоматически удалены при закрытии программы.
File createTempFile(String prefix, String suffix, File directory) Создает «временный файл» — файл с случайно сгенерированным уникальным именем – что-типа «dasd4d53sd». Дополнительные параметры – префикс к имени, суффикс (окончание). Если директория не указана, то файл создается в специальной директории ОС для временных файлов
boolean renameTo(File) Переименовывает файл – содержимое файла фактически получает новое имя. Т.е. можно переименовать файл «c:/dir/a.txt» в «d:/out/text/b.doc».
Метод Описание
boolean mkdir() Создает директорию. Название mkdir происходит от «make directory».
boolean mkdirs() Создает директорию и все поддиректории.
String[] list() Возвращает массив имен файлов, которые содержатся в директории, которой является текущий объект-файл.
String[] list(FilenameFilter filter) возвращает файлы ограниченные filter — функциональный интерфейс boolean accept (File dir, String name)
File[] listFiles() Возвращает массив файлов, которые содержатся в директории, которой является текущий объект-файл.
File[] listFiles(FileFilter filter) FileFilter — функ.интерфейс boolean accept(File pathname)
File[] listFiles(FilenameFilter filter) Возвращает массив файлов, которые содержатся в директории, которой является текущий объект-файл, ограниченные filter

Вывести на экран список всех файлов, которые находятся в определенной директории

Вывести имена всех файлов, которые есть в той же директории, что и текущий файл

Проверьте, существует ли файл или каталог в Java

В этом кратком руководстве мы познакомимся с различными способами проверки существования файла или каталога.

Сначала мы начнем с современных API-интерфейсов NIO, а затем рассмотрим устаревшие подходы к вводу-выводу.

2. Использование java.nio.file.Files ​

Чтобы проверить, существует ли файл или каталог, мы можем использовать метод Files.exists (Path) . Как видно из сигнатуры метода, мы должны сначала получить путь к нужному файлу или каталогу. Затем мы можем передать этот путь в метод Files.exists(Path) :

Поскольку файл не существует, он возвращает false . Также стоит упомянуть, что если метод Files.exists(Path) встречает IOException , он также возвращает false .

С другой стороны, когда данный файл существует, он вернет true , как и ожидалось:

Здесь мы создаем временный файл, а затем вызываем метод Files.exists(Path) .

Это работает даже для каталогов :

Если мы специально хотим знать, существует ли файл или каталог, мы также можем использовать методы Files.isDirectory(Path) или Files.isRegularFile(Path) :

Существует также метод notExists(Path) , который возвращает true , если заданный путь не существует:

Иногда Files.exists(Path) возвращает false , потому что у нас нет необходимых прав доступа к файлам . В таких сценариях мы можем использовать метод Files.isReadable(Path) , чтобы убедиться, что файл действительно доступен для чтения текущему пользователю:

2.1. Символические ссылки​

По умолчанию метод Files.exists(Path) следует символическим ссылкам . Если файл A имеет символическую ссылку на файл B , то метод Files.exists(A) возвращает значение true тогда и только тогда, когда файл B уже существует:

Теперь, если мы удалим цель ссылки, Files.exists(Path) вернет false :

Поскольку цель ссылки больше не существует, переход по ссылке ни к чему не приведет, а Files.exists(Path) вернет false .

Можно даже не переходить по символическим ссылкам, передав соответствующий LinkOption в качестве второго аргумента:

Поскольку сама ссылка существует, метод Files.exists(Path) возвращает значение true. Кроме того, мы можем проверить, является ли путь символической ссылкой, используя метод Files.isSymbolicLink(Path) :

3. Использование java.io.File ​

Если мы используем Java 7 или более новую версию Java, настоятельно рекомендуется использовать современные API-интерфейсы Java NIO для таких требований .

Однако, чтобы убедиться, что файл или каталог существует в устаревшем мире ввода-вывода Java, мы можем вызвать метод exists () для экземпляров File :

Если файл или каталог уже существует, он вернет true :

Как показано выше, метод exists() не заботится о том, файл это или каталог. Поэтому, пока он существует, он будет возвращать true .

Однако метод isFile() возвращает true , если указанный путь является существующим файлом:

Точно так же метод isDirectory() возвращает true , если указанный путь является существующим каталогом:

Наконец, метод canRead() возвращает true , если файл доступен для чтения:

Когда он возвращает false , файл либо не существует, либо текущий пользователь не имеет разрешения на чтение файла.

4. Вывод​

В этом кратком руководстве мы увидели, как убедиться, что файл или каталог существует в Java. Попутно мы говорили о современном NIO и устаревших API-интерфейсах ввода-вывода. Кроме того, мы увидели, как NIO API обрабатывает символические ссылки.

Проверка, существует ли файл или каталог в Java

Обратите внимание, что! Files.exists(путь) не эквивалентен Files.notExists(путь).

Почему они не эквивалентны? это не идет дальше с точки зрения объяснения. Кто-нибудь знает больше об этом? Спасибо заранее!

5 ответов

  • true , если файл не существует или его существование не может быть определено
  • false , если файл существует
  • true , если файл не существует
  • false , если файл существует или его существование не может быть определено

Глядя в исходном коде для различий, они оба делают то же самое с 1 большой разницей. У метода notExist(. ) есть дополнительное исключение, которое можно поймать.

В результате различия заключаются в следующем:

!exists(. ) возвращает файл как несуществующий, если при попытке извлечь файл создается IOException .

notExists(. ) возвращает файл как несуществующий, убедившись в том, что вызывается конкретное IOException subexception NoSuchFileFound и что он не является другим подэлементом на IOException , вызывая не найденный результат

Как видно из Files.exists, результат возврата:

И из Files.notExists результат возврата:

Итак, если !Files.exists(path) return TRUE означает, что он не существует или существование не может быть определено (2 возможности), а для Files.notExists(path) return TRUE означает, что он не существует (всего одна возможность).

Заключение !Files.exists(path) != Files.notExists(path) или 2 possibilities not equals to 1 possibility (см. объяснение выше о возможностях).

Обратите внимание, что этот метод не является дополнением к методу exist. Если невозможно определить, существует ли файл или нет, оба метода возвращают false.

Вы можете просто указать абсолютный путь, если каталог/каталоги не выйдет, он создаст каталог/директории.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *