Вступление
В 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
Другой способ проверить, равна ли длина File
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
.