Статьи

Java 7: фильтрация файлов с использованием NIO.2 — часть 1

NIO.2 — это новый API для операций ввода-вывода, включенный в JDK начиная с Java 7. С этим новым API вы можете выполнять те же операции, что и с

java.io плюс много замечательных функций, таких как: Доступ к метаданным файла и наблюдение за изменениями каталога, среди других. Очевидно, что пакет java.io не исчезнет из-за обратной совместимости, но мы рекомендуем начать использовать NIO.2 для наших новых требований ввода / вывода. В этом посте мы увидим, как легко фильтровать содержимое каталога с помощью этого API. Для этого есть 3 способа, поэтому этот пост является частью 1.

Что вам нужно

NetBeans 7+ или любая другая IDE, поддерживающая Java 7
JDK 7+

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

  • java.nio.file.Path : интерфейс, чьи объекты могут представлять файлы или каталоги в файловой системе. Это как java.io.File, но в NIO.2. Какую бы операцию ввода / вывода вы хотели выполнить, вам нужен экземпляр этого интерфейса.
  • java.nio.file.DirectoryStream : интерфейс, объекты которого перебирают содержимое каталога.
  • java.nio.file.Files : класс со статическими методами, который работает с файлами, каталогами и т. д.

Мы собираемся фильтровать содержимое каталога с помощью шаблонов glob, которые похожи на регулярные выражения, но проще. Шаблон сопоставляется с именами файлов, каталогов и т. Д., Которые находятся внутри каталога. Это важно помнить, используя этот метод, вы можете фильтровать только по имени файла, каталога и т. Д.

Для получения дополнительной информации о globbing,
проверьте эту вики . Кроме того, в документации есть
Документы Java .

Итак, давайте предположим, что у нас есть каталог с именем Images, и нам нужно перебирать файлы внутри этого каталога, но нам нужны только файлы .png. Мы должны выполнить следующие шаги, чтобы сделать это:

  1. Получите экземпляр java.nio.file.Path, который указывает на каталог Images.
  2. Откройте новый java.nio.file.DirectoryStream, используя класс java.nio.file.Files и передав в качестве параметров каталог и шаблон (* .png).
  3. Переберите содержимое каталога, используя экземпляр java.nio.file.DirectoryStream .

Далее приведен исходный код метода, который сканирует каталог с использованием шаблона, переданного в качестве параметра:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//in a class...
 
    /**
     * Scans the directory using the glob pattern passed
     * as parameter.
     * @param folder directory to scan
     * @param pattern glob pattern (filter)
     */
    private static void scan(String folder, String pattern) {
        //obtains the Images directory in the app directory
        Path dir = Paths.get(folder);
        //the Files class offers methods for validation
        if (!Files.exists(dir) || !Files.isDirectory(dir)) {
            System.out.println('No such directory!');
        }
        //Try with resources... so nice!
        try (DirectoryStream
 
                       ds =
                    Files.newDirectoryStream(dir, pattern)) {
            //iterate over the content of the directory
            int count = 0;
            for (Path path : ds) {
                System.out.println(path.getFileName());
                count++;
            }
            System.out.println();
            System.out.printf('%d Files match the pattern'
                                                     , count);
        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }

Ниже приведен результат выполнения на моем компьютере с Windows:

И на моей виртуальной машине Linux:

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

Нажмите здесь, чтобы загрузить полный исходный код.

Ссылка: Java 7: фильтрация файлов с использованием NIO.2 — часть 1 от нашего партнера по JCG Алексиса Лопеса из блога Java и ME .