集册 Java实例教程 使用FileVisitor进行更复杂的搜索

使用FileVisitor进行更复杂的搜索

欢马劈雪     最近更新时间:2020-01-02 10:19:05

475
使用FileVisitor进行更复杂的搜索

import java.io.IOException;

import java.nio.file.FileSystems;

import java.nio.file.FileVisitOption;

import java.nio.file.FileVisitResult;// from N o w J a v a . c o m - 时代Java

import java.nio.file.FileVisitor;

import java.nio.file.Files;

import java.nio.file.Path;

import java.nio.file.PathMatcher;

import java.nio.file.Paths;

import java.nio.file.attribute.BasicFileAttributes;

import java.util.EnumSet;


public class Main {

  public static void main(String[] args) throws Exception {

    String glob = "*.jpg";

    long size = 102400; // 100 kilobytes in bytes

    Path fileTree = Paths.get("C:/folder1/");

    Search walk = new Search(glob, size);

    EnumSet opts = EnumSet.of(FileVisitOption.FOLLOW_LINKS);/*from nowjava - 时代Java*/


    Files.walkFileTree(fileTree, opts, Integer.MAX_VALUE, walk);


  }

}


class Search implements FileVisitor {


  private final PathMatcher matcher;

  private final long accepted_size;


  public Search(String glob, long accepted_size) {

    matcher = FileSystems.getDefault().getPathMatcher("glob:" + glob);

    this.accepted_size = accepted_size;

  }


  void search(Path file) throws IOException {

    Path name = file.getFileName();


    long size = (Long) Files.getAttribute(file, "basic:size");


    if (name != null && matcher.matches(name) && size <= accepted_size) {

      System.out.println("Searched file was found: " + name + " in "

          + file.toRealPath().toString() + " size (bytes):" + size);

    }

  }


  @Override

  public FileVisitResult postVisitDirectory(Object dir, IOException exc)

      throws IOException {

    System.out.println("Visited: " + (Path) dir);

    return FileVisitResult.CONTINUE;

  }


  @Override

  public FileVisitResult preVisitDirectory(Object dir, BasicFileAttributes attrs)

      throws IOException {

    return FileVisitResult.CONTINUE;

  }


  @Override

  
展开阅读全文