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

大家好。 这是使用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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/370362.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js for 循环 添加tr td 算法

StringBuffer sbnew StringBuffer(); int n 5; sb.append("<tr>"); List<MenuBean> chs mb.getChildren(); for(int j 0; chs ! null && j < chs.size(); j){ MenuBean _mb2 chs.get(j); if (i % n 0)//被n整除&#xff0c;即有了n列之后…

1034. 二哥的金链

Description 一个阳光明媚的周末&#xff0c;二哥出去游山玩水&#xff0c;然而粗心的二哥在路上把钱包弄丢了。傍晚时分二哥来到了一家小旅店&#xff0c;他翻便全身的口袋也没翻着多少钱&#xff0c;而他身上唯一值钱的就是一条漂亮的金链。这条金链散发着奇异的光泽&#xf…

课时76.兄弟选择器(掌握)

我们先来明确一点&#xff0c;什么是兄弟&#xff1f; 比如&#xff0c;head和body是兄弟&#xff0c;必须是同级关系&#xff0c;如果是嵌套关系&#xff0c;儿子&#xff0c;孙子则不可以。 1.相邻兄弟选择器 CSS2 作用&#xff1a;给指定选择器后面紧跟的那个选择器选中的…

java中不能定义为变量名称_Java,“变量名”不能解析为变量

我使用Java使用Eclipse&#xff0c;出现此错误&#xff1a;"Variable name" cannot be resolved to a variable.使用此Java程序&#xff1a;public class SalCal {private int hoursWorked;public SalCal(String name, int hours, double hoursRate) {nameEmployee …

24v开关电源维修技巧_康佳LED液晶彩电KPS+L1900C301电源板原理与维修

康佳液晶彩电采用的KPSL1900C3-01型电源板&#xff0c;编号为34007728&#xff0c;版本号为35015686集成电路采用FAN7530FSGM300FSFR1700组合方案&#xff0c;输出5.1VSB/4A、24V/4A、12V/4A电压。应用于康佳LED47IS988PD、LED42M11PD、LED46MS92DC、LED42IS988PDE、LED42X5000…

zookeeper集群 新手安装指南

Zookeeper集群的角色&#xff1a; Leader 和 follower &#xff08;Observer&#xff09;zk集群最好配成奇数个节点只要集群中有半数以上节点存活&#xff0c;集群就能提供服务本事例采用版本:zookeeper-3.4.5 虚拟机:zk1 zk2 zk3/****************************************…

Google Guava并发– ListenableFuture

在上一篇文章中&#xff0c;我介绍了使用番石榴库中com.google.common.util.concurrent包中的Monitor类。 在本文中&#xff0c;我将继续介绍Guava并发实用程序&#xff0c;并讨论ListenableFuture接口。 ListenableFuture通过添加接受完成侦听器的方法&#xff0c;从java.util…

课时71.后代选择器(掌握)

1.什么是后代选择器&#xff1f; 作用&#xff1a;找到指定标签的所有后代标签&#xff0c;设置属性。 首先你要明确什么是后代&#xff1f; 你的儿子&#xff0c;孙子&#xff0c;重孙子等&#xff0c;只要有你的血脉的&#xff0c;都是你的后代。 我们先来举个例子 我们想…

java小球碰撞界面设计_JavaScript实现小球碰撞特效

JavaScript实现小球碰撞特效。类似自由落体运动。实现原理非常简单&#xff0c;就是动态的改变每个元素的坐标。使用radius属性将图片圆角化。使用left&#xff0c;top属性动态的改变小球的位置。碰撞反弹球&#xff0c;当碰撞到容器的边缘后&#xff0c;进行反弹&#xff0c;反…

es6常用基础合集

es6常用基础合集 在实际开发中&#xff0c;ES6已经非常普及了。掌握ES6的知识变成了一种必须。尽管我们在使用时仍然需要经过babel编译。 ES6彻底改变了前端的编码风格&#xff0c;可以说对于前端的影响非常巨大。值得高兴的是&#xff0c;如果你熟悉ES5&#xff0c;学习ES6并不…

java接口开发_如果你想学好Java,这些你需要了解

01基本知识  在学习Java之前&#xff0c;您需要了解计算机的基本知识&#xff0c;然后再学习Java。同时&#xff0c;您需要熟悉DOS命令、Java概述、JDK环境安装配置、环境变量配置。JDK和环境变量配置完成后&#xff0c;就可以编写Java程序了。02编程格式  此时&#xff0c…

从Java程序生成QR码图像

如果您精通技术和小工具&#xff0c;则必须了解QR码。 这些天&#xff0c;到处都可以找到它-在博客&#xff0c;网站&#xff0c;甚至在某些公共场所。 这在移动应用程序中非常流行&#xff0c;在移动应用程序中&#xff0c;您可以使用QR Code扫描仪应用程序扫描QR Code&#x…

LintCode-最长公共子串

给出两个字符串&#xff0c;找到最长公共子串。并返回其长度。 您在真实的面试中是否遇到过这个题&#xff1f; Yes例子 给出A“ABCD”&#xff0c;B“CBCE”&#xff0c;返回 2 注意 子串的字符应该连续的出如今原字符串中&#xff0c;这与子序列有所不同。标签 Expand 相关…

课时67.标签选择器(掌握)

通过上节课的学习我们明白了如何通过十六进制来表示颜色 例如&#xff1a;红色的几种表示方法 我们发现在学习CSS当中的一些属性的时候&#xff0c;它都有一些套路 只要知道属性的名称&#xff0c;属性有什么作用&#xff0c;它有哪些取值&#xff0c;这个属性有什么注意点 …

计算几何问题 java_【转载】ACM计算几何题目推荐

2107 Quoit Design 典型最近点对问题POJ 3714 Raid 变种最近点对问题B&#xff0c;最小包围圆最小包围圆的算法是一种增量算法&#xff0c;期望是O(n)。ZOJ 1450 Minimal CircleHDU 3007 Buried memoryC&#xff0c;旋转卡壳POJ 3608 Bridge Acr…

jdbc连接oracle的几种格式

1. SID的方式。已经不推荐使用这种方式了。 jdbc:oracle:thin:[<user>/<password>]<host>[:<port>]:<SID> 2.Service Name的方式。 jdbc:oracle:thin:[<user>/<password>]//<host>[:<port>]/<service> 3.TNSNames…

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

NIO.2是自Java 7起JDK中包含的用于I / O操作的新API。使用此新API&#xff0c;您可以执行与 java.io以及许多出色的功能&#xff0c;例如&#xff1a;访问文件元数据和监视目录更改等。 显然&#xff0c;由于向后兼容&#xff0c;java.io包不会消失&#xff0c;但是我们鼓励为…

第十三周活动进度表

学习进度表&#xff1a; 第三周内容时间周一&#xff08;4&#xff1a;10-6&#xff1a;00&#xff09;上课&#xff0c;周二晚上&#xff08;8&#xff1a;00-9&#xff1a;00&#xff09;&#xff0c;周四晚上&#xff08;8&#xff1a;00-8&#xff1a;30&#xff09;&#…

课时66.颜色控制属性下(理解)

今天来讲解十六进制控制属性的方法&#xff0c;其实用十六进制表示的方式本质就是rgb&#xff0c;只不过它们的格式不一样而已&#xff0c;十六进制中是通过每两位表示一种颜色的方式来给颜色赋值。 如 #FF0000 FF----r 00----g 00----b 修改前两位相当于修改rgb中的第一…

idea复制java_IntelliJ IDEA的剪切、复制和粘贴

IntelliJ IDEA的剪切、复制和粘贴本节内容概览&#xff1a;• 剪切、复制和粘贴的基本使用• 复制选定的文本片段• 将路径复制到文件• 将引用复制到一行或一个符号• 剪切选定的文本片段• 从剪贴板粘贴最后一个条目• 将最后一个条目从剪贴板粘贴为纯文本• 从剪贴板粘贴特定…