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也很灵活。

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

时间: 2024-07-29 14:02:19

jdk 1.7系列(三)处理目录和目录树的相关文章

Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送

Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送,写这个系列真的很要命,你要去把他们的API文档大致的翻阅一遍,而且各种功能都实现一遍,解决各种bug各种坑,不得不说,极光推送真坑,大家使用还是要慎重,我们看一下极光推送的官网 https://www.jpush.cn/common/ 推送比较使用,很多软件有需要,所以在这个点拿出来多讲讲,我们本节

Cocos2d-x创建android项目(cocos2d-x系列三)

不例外.最显眼的就是,在文件的根目录中增加了一个名为setup.py的配置文件.运行它可以配置系统的一些环境变量. 2.创建项目 新的版本我们来动手创建一个新项目吧.找到tools文件夹....额 打包的那个名为create-project.py的文件似乎木有了!原来,在新版本中,创建新项目已经可以通过命令行来创建了,相对于先前版本的图形界面,命令行更简洁.我们要在setup.py中设置参数.以mac平台为例,我们进入到对应目录,运行脚本setup.py: Setting up cocos2d-

短信开发系列(三):短信接收引擎

短信开发系列目录: 短信开发系列(一):GSM手机短信开发初探短信开发系列(二):GSM手机短信开发之短信解码短信开发系列(三):短信接收引擎 之前写了短信接收处理的一些内容,今年事情实在太多了,就停顿了这么一大段的时间.接下来会继续完成相关的内容. 今天先写用之前写的短信类库的一个应用,短信接收引擎.可以用在处理一些短信的提醒:作为前面两篇文章的一个实战运用,可以作为一个多线程.委托和事件.串口等方面知识的一个综合运用. 先来分析一下整个程序的流程: - 启动线程 - 定时运行线程主函数 -

给jdk写注释系列之jdk1.6容器(12)-PriorityQueue源码解析

PriorityQueue是一种什么样的容器呢?看过前面的几个jdk容器分析的话,看到Queue这个单词你一定会,哦~这是一种队列.是的,PriorityQueue是一种队列,但是它又是一种什么样的队列呢?它具有着什么样的特点呢?它的底层实现方式又是怎么样的呢?我们一起来看一下. PriorityQueue其实是一个优先队列,什么是优先队列呢?这和我们前面讲的先进先出(First In First Out )的队列的区别在于,优先队列每次出队的元素都是优先级最高的元素.那么怎么确定哪一个元素的优

Xen入门系列三【Xen 管理工具 xm】

xm命令是管理Xen的最基本的工具,可以通过xm --help 来获得帮助. 1. 列出所有正在运行的虚拟操作系统 # xm list PS[1]:可缩写为 xm li2. 启动虚拟机 # 通过配置文件启动虚拟机 # xm create <ConfigFile> # 通过虚拟机名称启动虚拟机,虚拟机必需已存在 xm list 中 # xm start <DomainName> 参数说明: ConfigFile:虚拟机配置文件 DomainName: 虚拟机名称 PS[2]:很多教程

pluskid&#39;SVM系列笔记(可当做目录对照看)

0.训练数据对分类器性能的影响 原文链接:http://blog.pluskid.org/?p=223 1.训练数据的不平衡性对分类器性能的影响(precision .accuracy.error rate 等) 2.SVM(support vector machine)通过hyperplane切分数据,so we can have lots of reasonable hyperplane. 对于需要复杂曲线才能切分的边界:将数据映射到高维空间,这样通常都能转化成可用线性边界切分的情况, us

给jdk写注释系列之jdk1.6容器(6)-HashSet源码解析&amp;Map迭代器

今天的主角是HashSet,Set是什么东东,当然也是一种java容器了. 现在再看到Hash心底里有没有会心一笑呢,这里不再赘述hash的概念原理等一大堆东西了(不懂得需要先回去看下HashMap了),需要在啰嗦一句的是hash表是基于快速存取的角度设计的,也是一种典型的空间换时间的做法(这个在分析HashMap中都有讲过).那么今天的HashSet它又是怎么一回事的,他的存在又是为了解决什么问题呢? 先来看下Set的特点:Set元素无顺序,且元素不可以重复. .想到了什么?无顺序,由于散列的

Exchange Server 2013 系列三:部署规划

杜飞 通过对客户的需求进行调研分析之后就需要进行整体规划,才能保证项目的可用性.可靠性和可扩展性.在Exchange Server2013的规划涉及内容很广,在此只能是将一些常用的.基本的内容提到. 活动目录规划: Exchange 2013 向 Active Directory 域服务架构中添加了新的属性,并对现有的类和属性进行了其他修改,以满足邮件处理的基本需求.Microsoft Exchange Server 2013 将所有配置和收件人信息存储在 Active Directory 目录

Skype For Business 2015实战系列9:准备活动目录

Skype For Business 2015实战系列9:准备活动目录 Skype For Business Server 2015和域控制器紧密结合.部署Skype For Business Server 2015的时候需要对Active Directory架构进行扩展.之所以扩展Active Directory架构其实就是在Active Directory中增加一些类和属性,以满足其部署的需求.闲言少叙,接下来我们进入正题,来看一下今天的内容: 对于Active Directory的准备过程

S5PV210开发系列三_简易Bootloader的实现

S5PV210开发系列三 简易Bootloader的实现 象棋小子          1048272975 Bootloader是嵌入式系统上电后第一段执行的代码.对于功能简单的处理器,可能并没有Bootloader的概念,但对于应用处理器,有不同的启动方式,不同的存储设备(Nand flash.sd/mmc.DDR2.SRAM等),不同的操作系统等,往往需要一个Bootloader先初始化CPU和相关的硬件,建立内存空间映射,把内核或应用程序加载到相应的内存执行位置,最后调用内核或应用程序,释