Java NIO中的Glob模式详解
2015-06-13 14:42
447 查看
Java NIO中的Glob模式详解
作者:chszs,转载需注明。博客主页:http://blog.csdn.net/chszs一、什么是Glob?
在编程设计中,Glob是一种模式,它使用通配符来指定文件名。例如:.java就是一个简单的Glob,它指定了所有扩展名为“java”的文件。Glob模式中广泛使用了两个通配符“”和“?”。其中星号表示“任意的字符或字符组成字符串”,而问号则表示“任意单个字符”。Glob模式源于Unix操作系统,Unix提供了一个“global命令”,它可以缩写为glob。Glob模式与正则表达式类似,但它的功能有限。
二、Java NIO中的Glob模式
Java SE7的NIO库中引入了Glob模式,它用于FileSystem类,在PathMatcher getPathMatcher(String syntaxAndPattern)方法中使用。Glob可以作为参数传递给PathMatcher。同样地,在Files类中也可以使用Glob来遍历整个目录。下面是Java NIO中使用的Glob模式:
Glob模式 | 描述 |
---|---|
*.txt | 匹配所有扩展名为.txt的文件 |
*.{html,htm} | 匹配所有扩展名为.html或.htm的文件。{ }用于组模式,它使用逗号分隔 |
?.txt | 匹配任何单个字符做文件名且扩展名为.txt的文件 |
. | 匹配所有含扩展名的文件 |
C:\Users\* | 匹配所有在C盘Users目录下的文件。反斜线“\”用于对紧跟的字符进行转义 |
/home/** | UNIX平台上匹配所有/home目录及子目录下的文件。**用于匹配当前目录及其所有子目录 |
[xyz].txt | 匹配所有单个字符作为文件名,且单个字符只含“x”或“y”或“z”三种之一,且扩展名为.txt的文件。方括号[]用于指定一个集合 |
[a-c].txt | 匹配所有单个字符作为文件名,且单个字符只含“a”或“b”或“c”三种之一,且扩展名为.txt的文件。减号“-”用于指定一个范围,且只能用在方括号[]内 |
[!a].txt | 匹配所有单个字符作为文件名,且单个字符不能包含字母“a”,且扩展名为.txt的文件。叹号“!”用于否定 |
三、Java NIO中的Glob示例
下面是一个Java程序,使用了Glob模式来搜索指定的目录及其子目录。package com.javapapers.java.nio; import java.io.IOException; import java.nio.file.FileSystems; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.PathMatcher; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; public class FileGlobNIO { public static void main(String args[]) throws IOException { String glob = "glob:**/*.zip"; String path = "D:/"; match(glob, path); } public static void match(String glob, String location) throws IOException { final PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher( glob); Files.walkFileTree(Paths.get(location), new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path path, BasicFileAttributes attrs) throws IOException { if (pathMatcher.matches(path)) { System.out.println(path); } return FileVisitResult.CONTINUE; } @Override public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException { return FileVisitResult.CONTINUE; } }); } }
程序输出如下:
D:\AndroidLocation.zip D:\Eclipse\7dec2014\eclipse-jee-kepler-R-win32-x86_64\workspace\.metadata\.mylyn\.tasks.xml.zip D:\Eclipse\7dec2014\eclipse-jee-kepler-R-win32-x86_64\workspace\.metadata\.mylyn\repositories.xml.zip D:\Eclipse\7dec2014\eclipse-jee-kepler-R-win32-x86_64\workspace\.metadata\.mylyn\tasks.xml.zip D:\mysql-workbench-community-6.2.5-winx64-noinstall.zip D:\workspace\Android\AndroidChatBubbles-master.zip D:\workspace\Android\Google Chat\XMPPChatDemo.zip D:\workspace\Android\Update-Android-UI-from-a-Service-master.zip D:\workspace\Android Chat\AndroidDialog.zip D:\workspace\Android Wear\AndroidWearPreview.zip
相关文章推荐
- JAVA并发编程——守护线程(Daemon Thread)
- 使用Java完成《算法导论》习题2.3-6
- Java实现对称式和非对称式加密
- Java的初始化
- java 封装mysql
- java设计模式之适配器模式
- maven 默认jdk版本设置
- Java 打开文件的两种方式
- Mybatis整合Spring
- java文件知识整理
- SpringMVC学习(四)
- Eclipse 中link一个异地的Folder
- Maven学习(二十)-- Maven常用命令-创建Java项目
- 电脑同时安装两个版本java jdk
- eclipse中设置@author为自己的名字
- Java中获取文件大小的正确方法
- Maven学习(七)- 构建Spring项目
- Maven学习(五)- 使用Maven构建Struts2项目
- 解决Please ensure that adb is correctly located at 'D:\java\sdk\platform-tools\adb.exe' and can be executed.
- java多线程