歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java NIO中的Glob模式詳解

Java NIO中的Glob模式詳解

日期:2017/3/1 9:27:04   编辑:Linux編程

一、什麼是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模式:

三、Java NIO中的Glob示例

下面是一個Java程序,使用了Glob模式來搜索指定的目錄及其子目錄。

  1. package com.javapapers.java.nio;
  2. import java.io.IOException;
  3. import java.nio.file.FileSystems;
  4. import java.nio.file.FileVisitResult;
  5. import java.nio.file.Files;
  6. import java.nio.file.Path;
  7. import java.nio.file.PathMatcher;
  8. import java.nio.file.Paths;
  9. import java.nio.file.SimpleFileVisitor;
  10. import java.nio.file.attribute.BasicFileAttributes;
  11. public class FileGlobNIO {
  12. public static void main(String args[]) throws IOException {
  13. String glob = "glob:**/*.zip";
  14. String path = "D:/";
  15. match(glob, path);
  16. }
  17. public static void match(String glob, String location) throws IOException {
  18. final PathMatcher pathMatcher = FileSystems.getDefault().getPathMatcher(
  19. glob);
  20. Files.walkFileTree(Paths.get(location), new SimpleFileVisitor<Path>() {
  21. @Override
  22. public FileVisitResult visitFile(Path path,
  23. BasicFileAttributes attrs) throws IOException {
  24. if (pathMatcher.matches(path)) {
  25. System.out.println(path);
  26. }
  27. return FileVisitResult.CONTINUE;
  28. }
  29. @Override
  30. public FileVisitResult visitFileFailed(Path file, IOException exc)
  31. throws IOException {
  32. return FileVisitResult.CONTINUE;
  33. }
  34. });
  35. }
  36. }


程序輸出如下:

  1. D:\AndroidLocation.zip
  2. D:\Eclipse\7dec2014\eclipse-jee-kepler-R-win32-x86_64\workspace\.metadata\.mylyn\.tasks.xml.zip
  3. D:\Eclipse\7dec2014\eclipse-jee-kepler-R-win32-x86_64\workspace\.metadata\.mylyn\repositories.xml.zip
  4. D:\Eclipse\7dec2014\eclipse-jee-kepler-R-win32-x86_64\workspace\.metadata\.mylyn\tasks.xml.zip
  5. D:\mysql-workbench-community-6.2.5-winx64-noinstall.zip
  6. D:\workspace\Android\AndroidChatBubbles-master.zip
  7. D:\workspace\Android\Google Chat\XMPPChatDemo.zip
  8. D:\workspace\Android\Update-Android-UI-from-a-Service-master.zip
  9. D:\workspace\Android Chat\AndroidDialog.zip
  10. D:\workspace\Android Wear\AndroidWearPreview.zip

Copyright © Linux教程網 All Rights Reserved