Рубрики
Без рубрики

Java: как перечислить, отфильтровать и получить информацию о папках и файлах

Оригинальный пост: https://www.campusmvp.es/recursos/post/java-como-listar-filtrar-y-obtener-informacion … Помечено java, russian.

Оригинальный пост : https://www.campusmvp.es/recursos/post/java-como-listar-filtrar-y-obtener-informacion-de-carpetas-y-archivos.aspx

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

В Java это очень легко получить благодаря класс java.io. Файл . Этот класс позволяет нам получать информацию о любом элементе файловой системы.

Чтобы использовать его, нам просто нужно импортировать его в заголовок нашей программы:

import java.io.File;

И мы сможем использовать его в нашем приложении.

Чтобы получить информацию о файле или папке, просто используйте его конструктор, передав ему путь к нему. Так:

String sCarpAct = System.getProperty("user.dir");File carpeta = new File(sCarpAct);

В первой строке мы получаем текущую папку, из которой выполняется код, и используем класс/| File//для получения информации о нем. Этому конструктору мы можем передать абсолютный или относительный путь в файловой системе.

Класс//File//служит для представления файла или папки и предлагает свойства и методы, которые позволяют нам получать доступ к его данным и выполнять операции с ними | такие как переименование, удаление, создание папок, список их содержимого и т. Д… То, что мы можем сделать с ним, будет зависеть от того, какие разрешения у нас есть для рассматриваемого файла или папки.

Некоторые из этих методов:

  • CanExecute ()//: возвращает//true или false//в зависимости от того, является ли файл исполняемым или нет. CanRead ()//: есть ли у вас доступ на чтение или нет CanWrite ()//: если вы можете написать на нем или Нет Создать новый файл ()
  • : создает новый пустой файл с указанным именем. delete ()|/: удалить файл или каталог
  • exists ()|/: определяет, будет ли файл представлен Файл
  • по пути, который мы прошли, он существует или нет. getName ()//: имя файла или папки
  • getParent() : возвращает строку с путь к папке” родитель ” текущего файла или папки.
  • isDirectory ()|/: указывает, представляет ли текущий объект папку или Нет isFile () : указывает, представляет ли текущий объект в файл isHidden ()|/: если это скрытый элемент в файловой системе
  • length ()//: размер файла в байтах. Если он не существует или у вас нет разрешения, он возвращает 0. В случае папок в Linux/Mac с файловой системой ext3/ext4 он всегда возвращает 4096, так как эти это размер блока в Linux, и это минимум, который может занимать любая ссылка на диске, например папка (4 КБ). list ()|/: имена дочерних файлов и папок папки.
  • listFiles ()//: как указано выше, но возвращает объекты File для каждого файла или папки. mkdir ()|/: создать папку
  • renameTo ()|/: переименовать файл или папку

Со всем этим можно многое сделать. Проверьте их все в документации по ссылке выше.

Давайте рассмотрим пример//как перечислить все файлы в папке//с помощью нескольких из этих методов:

File carpeta = new File(sCarpAct);String[] listado = carpeta.list();if (listado == null || listado.length == 0) { System.out.println("No hay elementos dentro de la carpeta actual"); return;}else { for (int i=0; i< listado.length; i++) { System.out.println(listado[i]); }}

Что делается в этом фрагменте:

  1. Создается новый объект File//для представления интересующей нас папки. С помощью метода
  2. list ()//мы получаем имена всех его детей Если он ничего не возвращает или длина равна 0, мы показываем сообщение о том, что в текущей папке нет элементов (мы могли бы также проверить, является ли это папкой или не с |/isDirectory ()|/) В другой ветви условного мы перебираем в простом цикле все имена дочерних элементов, отображая их имена каждый в строке в консоли.

Мы увидим что-то вроде этого:

Это нормально для репликации команды//ls ( (Linux, Mac) o реж (//(Windows) основная командная строка, но если мы хотим больше информации, это не принесет нам много пользы.

Мы можем улучшить его, используя метод//listFiles ()//который возвращает нам объекты//File и поэтому мы можем показать больше информации о каждом из них без необходимости явно создавать их, а также:

File[] archivos = carpeta.listFiles();if (archivos == null || archivos.length == 0) { System.out.println("No hay elementos dentro de la carpeta actual"); return;}else { SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss"); for (int i=0; i< archivos.length; i++) { File archivo = archivos[i]; System.out.println(String.format("%s (%s) - %d - %s", archivo.getName(), archivo.isDirectory() ? "Carpeta" : "Archivo", archivo.length(), sdf.format(archivo.lastModified()) )); }}

В этом случае код похож, но мы можем использовать методы, которые мы видели, чтобы показать больше информации о каждом элементе. В этом случае мы показываем его имя, будь то каталог или файл, его размер и дату последнего изменения. Для отображения даты в правильном формате я использую класс//SimpleDateFormater//пакета//java. text. SimpleDateFormat|/.

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

Для этого мы можем//использовать фильтр|/. Фильтры-это классы, которые реализуют интерфейс FilenameFilter (если мы просто хотим фильтровать по имени) или FileFilter (если мы хотим использовать объекты File для фильтрации). Этот интерфейс определяет только метод//accept ()//который при простейших перегрузках принимает в качестве параметра файл для фильтрации и должен возвращать//true o//false//в зависимости от того, проходит ли файл фильтр или нет.

Например, мы будем фильтровать элементы в нашей папке, так что он возвращает только файлы, но не папки. Это простое условие, но логически мы могли бы применить любое сложное правило, которое нас интересовало, на основе доступных свойств каждого элемента (его имени, размера, разрешений… или комбинации нескольких из них).

Давайте посмотрим, как это сделать.

Во-первых, давайте определим фильтр:

FileFilter filtro = new FileFilter() {
 @Override
 public boolean accept(File arch) {
   return arch.isFile();
 }
};

В этом случае для краткости я использовал литерал с конструктором для создания объекта и реализации метода//accept () , но я мог бы создать класс более обычным способом, используя implements//для реализации интерфейса и т. Д.. Форма-это самое меньшее. Единственное, что он делает, это вызов метода isFile() каждого файла или папки для возврата//true//только в случае, если это файлы. Таким образом, после фильтрации будут получены только файлы и папки.

Теперь использовать его так же просто, как передать новый объект фильтра в метод listFiles ()//, например:

archivos = carpeta.listFiles(filtro);

if (archivos == null || archivos.length == 0) {
 System.out.println("No hay elementos dentro de la carpeta actual");
 return;
}
else {
 SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
 for (int i=0; i< archivos.length; i++) {
   File archivo = archivos[i];
   System.out.println(String.format("%s (%s) - %d - %s", 
                       archivo.getName(), 
                       archivo.isDirectory() ? "Carpeta" : "Archivo",
                       archivo.length(),
                       sdf.format(archivo.lastModified())
                      ));
 }
}

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

Как вы видите, использование этого класса чрезвычайно просто.

Я оставляю вам весь пример кода |/в этом repl.it//, встроенный ниже. Нажмите треугольник выше, чтобы запустить его непосредственно в браузер и просматривать результаты:

Примечание|/: если вам интересно, как я могу отображать цвета на консоли, прочитайте эту другую статью.

Надеюсь, вы найдете это полезным!

Оригинальный пост : https://www.campusmvp.es/recursos/post/java-como-listar-filtrar-y-obtener-informacion-de-carpetas-y-archivos.aspx

Оригинал: “https://dev.to/campusmvp/java-cmo-listar-filtrar-y-obtener-informacin-de-carpetas-y-archivos-g1i”