大家好。 这是使用NIO.2系列进行文件过滤的第2部分。 对于那些尚未阅读第1部分的人 ,这里有个回顾。

NIO.2是自Java 7起JDK中包含的用于I / O操作的新API。使用此新API,您可以执行与java.io相同的操作,以及许多出色的功能,例如:访问文件元数据并查看用于目录更改等。 显然,由于向后兼容,java.io包不会消失,但是我们鼓励为满足新的I / O需求而开始使用NIO.2。 在本文中,我们将看到使用此API过滤目录内容有多么容易。 为此,有3种方法,我们已经在第1部分中回顾了一种方法,现在我们将看到另一种方法。

你需要什么

NetBeans 7+或任何其他支持Java 7的IDE

JDK 7+

在某些应用程序中,过滤目录的内容是一项常见的任务,而NIO.2使其变得非常简单。 接下来将描述我们将要使用的类和接口:

  • java.nio.file.Path :接口,其对象可以表示文件系统中的文件或目录。 就像java.io.File,但是在NIO.2中。 无论您要执行什么I / O操作,都需要该接口的实例。
  • java.nio.file.PathMatcher :允许对象在路径上执行匹配操作的接口。
  • java.nio.file.DirectoryStream :接口,其对象遍历目录的内容。
  • java.nio.file.Files :带有对文件,目录等进行操作的静态方法的类。

我们将用来过滤目录内容的方法是通过使用实现java.nio.file.PathMatcher接口的对象。 我们可以使用方法在java.nio.file.Files类的帮助下获得这些对象之一
+ getPathMatcher(String):PathMatcher 。 此方法同时支持'glob'和'regex'模式。 您可以检查使用NIO.2的文件过滤的第1部分,以获取有关“ glob”的更多信息以及有关“ regex”的信息,请访问java.util.regex.Pattern类。 该模式与文件,目录等的名称匹配。它们位于目录内。 记住这一点很重要,使用此方法只能按文件名,目录名等进行过滤。

例如,如果要过滤.png和.jpg图像,则应使用以下语法和模式之一(请注意语法和模式之间的冒号):

  • 'glob:*。{png,jpg}'
  • 'regex:([[^ \ s] +(\。(?i)(png | jpg))$)'

当然,“ glob”语法要简单得多,但是您可以选择使用正则表达式进行更详细的匹配。 无论如何,您可能想知道如果java.nio.files.DirectoryStream接口允许您直接使用'glob'进行过滤,那么为什么应该使用这种方法呢?让我们假设您已经有了一个过滤器,但是您需要执行一种过滤操作,那就是您需要使用这种方法时。

以下代码段定义了一种使用不同模式扫描目录的方法:

//in a class.../*** Scans the directory using the patterns passed * as parameters. * Only 3 patterns will be used.* @param folder directory to scan* @param patterns The first pattern will be used* as the glob pattern for the DirectoryStream.     */private static void scan(String folder, String... patterns) {//obtains the Images directory in the app directoryPath dir = Paths.get(folder);//the Files class offers methods for validationif (!Files.exists(dir) || !Files.isDirectory(dir)) {System.out.println('No such directory!');return;}//validate at least the glob patternif (patterns == null || patterns.length < 1) {System.out.println('Please provide at least the glob pattern.');return;}//obtain the objects that implements PathMatcherPathMatcher extraFilterOne = null;PathMatcher extraFilterTwo = null;if (patterns.length > 1 && patterns[1] != null) {extraFilterOne = FileSystems.getDefault().getPathMatcher(patterns[1]);}if (patterns.length > 2 && patterns[2] != null) {extraFilterTwo = FileSystems.getDefault().getPathMatcher(patterns[2]);}//Try with resources... so nice!try (DirectoryStreamds = Files.newDirectoryStream(dir, patterns[0])) {//iterate over the content of the directory and apply //any other extra patternint count = 0;for (Path path : ds) {System.out.println('Evaluating ' + path.getFileName());if (extraFilterOne != null && extraFilterOne.matches(path.getFileName())) {System.out.println('Match found Do something!');}if (extraFilterTwo != null && extraFilterTwo.matches(path.getFileName())) {System.out.println('Match found Do something else!');}count++;}System.out.println();System.out.printf('%d Files match the global pattern\n', count);} catch (IOException ex) {ex.printStackTrace();}}

您可以尝试使用以下参数调用最后一个方法:

  • C:\ Images或/ Images,具体取决于您的操作系统。
  • ?_ *。jpg此模式指定您要使用名称以一位开头和下划线开头的所有.jpg图像。
  • glob:2_ *指定另一个过滤器(使用glob语法),在该过滤器中,您仅需要名称以第二个数字开头并带有下划线的项目。
  • glob:3_ *指定另一个过滤器(使用glob语法),在该过滤器中,您只希望名称以数字3开头并带有下划线的项目。

拥有多个过滤器可让您对匹配项采取不同的操作。

以下是在Windows计算机上执行的结果:

在我的Linux虚拟机上:

再一次,写一次,到处运行! 但是,请注意,项目的顺序取决于系统,因此请不要硬编码文件或目录的位置。

希望您喜欢这篇文章,还有另一种更强大的方法来过滤目录的内容,我们将在第3部分中进行探讨。 单击此处以下载源代码。

参考: Java 7:使用NIO.2进行文件过滤–来自Java和ME博客的JCG合作伙伴 Alexis Lopez的第2部分 。

翻译自: https://www.javacodegeeks.com/2012/11/java-7-file-filtering-using-nio-2-part-2.html

Java 7:使用NIO.2进行文件过滤-第2部分相关推荐

  1. Java 7:使用NIO.2进行文件过滤–第2部分

    大家好. 这是使用NIO.2系列进行文件过滤的第2部分. 对于那些尚未阅读第1部分的人 ,这里有个回顾. NIO.2是自Java 7起JDK中包含的用于I / O操作的新API.使用此新API,您可以 ...

  2. Java 7:使用NIO.2进行文件过滤–第3部分

    大家好. 这是使用NIO.2系列进行文件过滤的第3部分. 对于那些尚未阅读第1 部分或第2部分的人 ,这里有个回顾. NIO.2是自Java 7起JDK中包含的用于I / O操作的新API.使用此新A ...

  3. Java 7:使用NIO.2进行文件过滤-第1部分

    NIO.2是自Java 7起JDK中包含的用于I / O操作的新API.使用此新API,您可以执行与 java.io以及许多出色的功能,例如:访问文件元数据和监视目录更改等. 显然,由于向后兼容,ja ...

  4. Java实现文件过滤

    Java实现文件过滤的方法,比如我只想获得某个路径下.java文件 只需要实现FilenameFilter这个接口即可. 比如: private class FileFilter implements ...

  5. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤...

    JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...

  6. JAVA之旅(二十八)——File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤

    JAVA之旅(二十八)--File概述,创建,删除,判断文件存在,创建文件夹,判断是否为文件/文件夹,获取信息,文件列表,文件过滤 我们可以继续了,今天说下File 一.File概述 文件的操作是非常 ...

  7. Java NIO内存映射文件

    Java NIO 内存映射文件 文件操作的四大方法 效率对比 内存映射文件 缓冲区 缓冲区的获得: 文件加锁机制 文件锁使用注意点: 文件操作的四大方法 前提:内存的访问速度比磁盘高几个数量级,但是基 ...

  8. 【java】java sftp访问文件夹,java smb访问共享文件夹 按时间过滤查找文件 集成springboot

    文章目录 java的sftp传输 sftp按时间过滤文件列表 sftp注意事项 java smb1.0传输 smb1.0按时间过滤文件列表 smb注意事项 java smb2.0/3.0传输(smbj ...

  9. 【学习笔记】JAVA IO与NIO(new IO)的对比与不同IO模型的理解

    JAVA IO 分类: 几种IO 模型 1. 阻塞 IO 模型 2. 非阻塞 IO 模型 JAVA NIO 多路复用 IO 模型(即Java中的NIO) JAVA IO 思维导图: 分类: 按照流的方 ...

最新文章

  1. java httpinvoker漏洞_Spring HttpInvoker 服务端安全验证的和客户端请求配置
  2. ajax学生校验学号,ajax校验数据库数据是否存在
  3. 适合 Python 入门的 8 款强大工具,赶紧收藏一波!
  4. 三位数流水码的生成(000·····009··00A····00Z····ZZZ)
  5. python 获取复数的实部和虚部
  6. 在大学城开一间宾馆能挣多少钱?
  7. 硬件设计分享-⑨电感与磁珠
  8. PADS VX.2.7 + OrCAD 16.5 + AutoCAD 2020 使用教程
  9. Tomcat 9下载安装及配置
  10. ios删除字符串第一位_iOS “字符串” 的几种常见的截取方法(随时更新)
  11. col-xs , col-sm , col-md , col-lg是什么意思?什么时候用?
  12. H3C任意命令执行漏洞
  13. java实验二_Java实验2
  14. 一张图搞懂FreeModbus
  15. BAS美国百盛布线E-TIME智能布线解决方案
  16. 生活小技巧——WiFi密码忘了怎么办
  17. A_Prn_Barcode 应用code128码的 注意事项
  18. 史上最强C语言教程----程序的编译与预处理(1)
  19. 2023计算机毕业设计SSM最新选题之java乒乓球馆管理系统l4q4p
  20. Codeforces 1084A - The Fair Nut and Elevator

热门文章

  1. 让CentOS能用yum自动安装rar和unrar
  2. 会话技术Session
  3. 需求澄清_澄清字符串的格式!
  4. cloud foundry_将Spring Boot应用程序绑定到Cloud Foundry中的服务的方法
  5. spock框架_Spock VW:编写自定义的Spock框架扩展
  6. qt如何捕获应用程序输出_企业应用程序中需要捕获的5大Java性能指标
  7. Hibernate锁定模式– PESSIMISTIC_FORCE_INCREMENT锁定模式如何工作
  8. 基于价值链的流程框架分类_基于价值的类
  9. Apache Camel 3.2 – Camel的无反射配置
  10. Java:以CSV格式流式传输JDBC结果集