DevGang
Авторизоваться

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

В Java работа с файлами и каталогами довольно распространена. Нас также часто интересует содержимое этих файлов и каталогов.

В зависимости от содержимого файла мы можем вести себя по-другому. Возможно, мы записываем некоторые данные в файл и сначала хотим проверить, содержит ли он уже некоторую информацию, прежде чем перезаписывать ее. Точно так же мы могли бы захотеть удалить каталог, если он пуст. Знание того, пуст он или нет, в таких случаях может иметь жизненно важное значение.

В этом руководстве мы рассмотрим несколько примеров того, как проверить, пуст ли файл или каталог в Java.

Проверьте, является ли файл пустым в Java

Есть два способа проверить пуст ли File.

Мы будем работать с двумя файлами, одним пустым и одним непустым:

09/17/2020  01:00 PM                 0 file
09/17/2020  01:00 PM                 2 file2

file - 0 байт, а длина file2- 2 байта.

Стоит отметить, что перед выполнением каких-либо операций с файлом или каталогом вы должны проверить, существует ли файл или каталог, а также их тип, чтобы избежать запуска неправильных методов.

Использование File.length()

Согласно документации, объект File представляет собой «абстрактное представление путей к файлам и каталогам». У каждого объекта File есть методы для получения информации об этом конкретном файле.

Давайте продолжим и создадим простой вспомогательный метод, который возвращает true, если длина File равна, 0 и false если это не так:

public boolean isFileEmpty(File file) {
    return file.length() == 0;
}

Теперь давайте проверим это на пустом и непустом файле:

File file1 = new File("/file");
File file2 = new File("/file2");

System.out.println(isFileEmpty(file1));
System.out.println(isFileEmpty(file2));

Этот код возвращает:

true
false

Использование BufferedReader

Другой способ проверить, соответствует ли длина файла 0 - использовать расширение BufferedReader. Это позволяет нам получить доступ к символьному содержимому из потоков (например, файлов). Если в файле нет содержимого, он пуст:

public boolean isFileEmpty(File file) {
    BufferedReader br = new BufferedReader(new FileReader(file));     
    return br.readLine() == null;
}

Объявление метода остается таким же, как и раньше: он принимает Fileи возвращает boolean. Хотя на этот раз мы создали экземпляр BufferedReaderи предоставили ему, FileReaderкоторый принимает наши File. Это немного сложнее, чем раньше, но также хорошо выполняет свою работу.

Затем, если BufferedReaderнечего читать из файла, мы знаем, что он пуст.

Опять же, давайте проверим это на пустом и не пустом файле:

File file1 = new File("/file");
File file2 = new File("/file2");

System.out.println(isFileEmpty(file1));
System.out.println(isFileEmpty(file2));

Этот код возвращает:

true
false

Проверка, пуст ли каталог в Java

Также есть два способа проверить, пуст ли каталог в Java.

Использование File.list()

У класса File есть удобный метод для сбора всех файлов и каталогов (записей , то есть файлов и каталогов) внутри заданного каталога. Мы можем использовать этот метод, чтобы проверить, равно ли количество таких записей нулю:

public boolean isDirectoryEmpty(File directory) {  
    String[] files = directory.list();
    return files.length == 0;  
}

Метод возвращает массив имен записей. Если значение этого массива length равно 0, каталог пуст.

Давайте запустим это в пустом и не пустом каталоге:

File directory1 = new File("/empty_directory");
File directory2 = new File("/directory");

System.out.println(isDirectoryEmpty(directory1));
System.out.println(isDirectoryEmpty(directory1));

Это возвращает:

true
false

Использование DirectoryStream

Еще одна быстрая, хотя и более продвинутая методика предполагает использование потоков. Сначала мы создаем новый DirectoryStream, вызывая класс Files.newDirectoryStream(). Этот метод принимает Path, поэтому нам нужно преобразовать наш File в Path, вызвав метод toPath():

public boolean isDirectoryEmpty(File directory) throws IOException {
    DirectoryStream<Path> stream = Files.newDirectoryStream(directory.toPath());
    return !stream.iterator().hasNext();  
}

Затем мы собираем итератор потока и проверяем, содержит ли он следующую запись, вызывая hasNext(). Если он не содержит хотя бы одной записи, каталог пуст.

Запустим этот код:

File directory1 = new File("/empty_directory");
File directory2 = new File("/directory");

System.out.println(isDirectoryEmpty(directory1));
System.out.println(isDirectoryEmpty(directory1));

И это приводит к:

true
false

Вывод

В этом руководстве мы привели несколько примеров для проверки того, пусты ли файлы и каталоги. Сначала мы проверили, пусты ли файлы, используя класс File и его метод length(), а затем применили подход BufferedReader.

Затем мы проверили, пуст ли каталог, используя File.list() и создав файл DirectoryStream.

Источник:

#Java
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

Поделитесь своим опытом, расскажите о новом инструменте, библиотеке или фреймворке. Для этого не обязательно становится постоянным автором.

Попробовать

Сделайте первый шаг к новой профессии

Получить скидку