jdk 1.7系列处理目录和目录树

Posted gudongcheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jdk 1.7系列处理目录和目录树相关的知识,希望对你有一定的参考价值。

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系列处理目录和目录树的主要内容,如果未能解决你的问题,请参考以下文章

Android开发环境搭建:jdk版本为1.7,sdk 版本选择哪个合适?

JDK1.8中的HashMap

jdk 1.7系列 JAVA IO 简史

扒一扒系列之开发中常用的Java集合类(ArrayList篇 jdk 1.7)

win10系统jdk安装和环境变量配置

jdk 错误1316 指定账户已存在 与 jdk1.7安装和配置环境变量 与 jdk1.8与1.7版本的切换使用