java7新特性3——目录与目录树遍历

2017-04-01  本文已影响204人  不迷失

虽然现在都使用Java8了,但是Java7的新特性你是否都知道了呢?

1f2f7374e1990b4bb551fd141bc4a53d1f2f7374e1990b4bb551fd141bc4a53d

Java7之前,虽然能做到遍历目录与目录树,但比较麻烦,需要自己编码。

新的IO基于Path提供了方便的目录与目录树遍历及过滤等,非常简单方便。

目录遍历

通过Files的工具方法,可以获取某个path对应的DirectoryStream接口,通过此接口就能遍历改path下面(直接子path)的项目。

      ​Path dir= Paths.get("f:\\");
        //得到改path的目录流接口
        DirectoryStream<Path> directoryStream = Files.newDirectoryStream(dir);
      
        for(Path item : directoryStream){
            System.out.println(item.toAbsolutePath()+":"+item.getFileName());
        }

也可以方便的过滤某些形式的文件,如:
     ​    ​//得到改path下所有.txt文件的目录流接口
        DirectoryStream<Path> txtStream=Files.newDirectoryStream(dir,"*.txt");

        System.out.println("===txt===");

        for(Path item : txtStream){
            System.out.println(item.toAbsolutePath()+":"+item.getFileName());
        }
        

目录树遍历

新的api支持递归的遍历整改目录下的所有目录及文件。

通过Files.walkFileTree(path,fileVisittor))即可实现。

第一个参数是要遍历的path

第二个参数是一个遍历过程中的处理接口FileVisitor。它提供了遍历文件树的各种操作:

一个实例:

package java7;

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

/**
 * 使用Java7提供的api进行目录及目录树遍历
 * @author qiang.xie
 * @date 2017/3/29
 */
public class DirList {

    public static void main(String[] arg) throws IOException {
        Path dir= Paths.get("f:\\");
        //得到改path的目录流接口
        DirectoryStream<Path> directoryStream = Files.newDirectoryStream(dir);

        for(Path item : directoryStream){
            System.out.println(item.toAbsolutePath()+":"+item.getFileName());
        }


        //得到改path下所有.txt文件的目录流接口
        DirectoryStream<Path> txtStream=Files.newDirectoryStream(dir,"*.txt");

        System.out.println("===txt===");

        for(Path item : txtStream){
            System.out.println(item.toAbsolutePath()+":"+item.getFileName());
        }

        System.out.println("===dir tree===");


        Files.walkFileTree(dir,new VisitorFile());


    }

    static class VisitorFile extends SimpleFileVisitor<Path>{
        //访问目录及子目录中的每个path的方法
        @Override
        public FileVisitResult visitFile(Path file,BasicFileAttributes attrs) throws IOException {
            System.out.println(file.toAbsolutePath()+":"+file.getFileName());
            //表示继续遍历
            return FileVisitResult.CONTINUE;
        }


        //访问某个path失败时调用的方法,默认抛出异常
        @Override
        public FileVisitResult visitFileFailed(Path file,IOException exc) throws IOException {
            System.out.println(file+";"+exc.getClass());
            //表示继续遍历
            return FileVisitResult.CONTINUE;
        }
    }
}

--

@不迷失|知识改善生活

专注技术研究与视频教学,分享有价值的技术与经验,关注程序员的发展!

--
@不迷失技术博客

微信公众号:java技术(javajidi_com)

技术交流群:245130488

--

教学视频

QQ课堂

百度传课

上一篇下一篇

猜你喜欢

热点阅读