码迷,mamicode.com
首页 > 其他好文 > 详细

jdk 1.7系列(三)处理目录和目录树

时间:2018-10-31 01:10:45      阅读:219      评论:0      收藏:0      [点我收藏+]

标签:ESS   catch   遍历目录   ima   attr   stream   walk   文件   tree   

DirectoryStream<T> 接口

java.nio.file.DirectoryStream<T>接口和它的实现类提供的功能:

  1. 循环遍历目录中的子项,比如查找目录中的文件
  2. 用glob表达式(比如*Footbar*)进行目录子项匹配和基于MIME的内容检测(比如text/xml文件)
  3. 用walkFileTree方法实现递归移动、复制和删除操作

一、在目录中查找文件,列出目录下的xml文件

技术分享图片

以此项目为示例:

package com.gudongcheng.jdk7.nio;

import java.io.IOException;
import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;

/**
 * @author lizuoyang
 * @date 2018/10/30
 * @desc 使用DirectoryStream接口在目录中查找文件
 */
public class DirectoryStreamDemo {
    public static void main(String[] args) {
        //设定起始路径
        Path dir = Paths.get("E:\\ideaProjects\\Demo");

        //使用try-with-resource语法声明过滤流  过滤dir文件夹中所有的.java文件
        try (DirectoryStream<Path> stream = Files.newDirectoryStream(dir, "*.xml")) {
            for (Path entry : stream) {
                System.out.println(entry.getFileName());
            }
        } catch (IOException e) {
            System.err.println(e.getMessage());
        }

    }
}

 

二、遍历目录树,列出目录中所有java源码文件

package com.gudongcheng.jdk7.nio;

import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;

/**
 * @author lizuoyang
 * @date 2018/10/30
 * @desc 使用Files.walkFileTree和SimpleFileVisitor<T>类 递归查找目录
 */
public class WalkFileTreeDemo {
    public static void main(String[] args) throws IOException {
        //递归查询目录下以.xxx结尾的文件
        Path startingDir = Paths.get("E:/ideaProjects/Demo");
        Files.walkFileTree(startingDir,new FindJavaVisitor());
    }

    private static class FindJavaVisitor extends SimpleFileVisitor<Path> {
        private static final String SUFFIX = ".java";
        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
            if (file.toString().endsWith(FindJavaVisitor.SUFFIX)) {
                System.out.println(file.getFileName());
            }
            return FileVisitResult.CONTINUE;
        }
    }
}

备注:整个过程从调用Files.walkFileTree方法开始,这里最关键的是FindJavaVisitor,该类扩展了SimpleFileVisitor,你想让SimpleFileVisitor来实现遍历目录,你唯一要做的就是重写visitFile ( Pathj,BasicFileAttributes) 方法,在这个方法中你也只需要写些代码判断文件名是否以.java结尾。其他用例包括递归移动、复制、删除或者修改文件。在大多数应用场景中,你只需要扩展SimpleFileVisitor,你也可以实现中级的FileVisitor,API也很灵活。

 

jdk 1.7系列(三)处理目录和目录树

标签:ESS   catch   遍历目录   ima   attr   stream   walk   文件   tree   

原文地址:https://www.cnblogs.com/gudongcheng/p/9880331.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!