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

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

Вступление

В 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 .

Licensed under CC BY-NC-SA 4.0
comments powered by Disqus