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. Мы должны выполнить следующие шаги, чтобы сделать это:
- Получите экземпляр java.nio.file.Path, который указывает на каталог Images.
- Откройте новый java.nio.file.DirectoryStream, используя класс java.nio.file.Files и передав в качестве параметров каталог и шаблон (* .png).
- Переберите содержимое каталога, используя экземпляр 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 .