Java NIO.2 使用Files类遍历文件夹
在以前的Java版本中,如果要遍历某个文件夹下所有的子文件、子文件夹,需要我们自己写递归,很麻烦。
在Java7以后,我们可以NIO.2中的Files工具类来遍历某个文件夹(会自动递归)。
大致用法:
Path path=Paths.get("D:\\二次元");
Files.walkFileTree(path,new FileVisitor<Path>(){
//访问文件夹之前自动调用此方法
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
return null;
}
//访问文件时自动调用此方法
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
return null;
}
//访问文件失败时自动调用此方法
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return null;
}
//访问文件夹之后自动调用此方法
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
return null;
}
});
Files.walkFileTree(Path path, FileVisitor visitor);
静态方法。第一个参数指定要遍历的文件夹,第二个参数是FileVisitor对象,指定遍历时如何处理文件、文件夹。
FileVisitor是一个接口,需要实现4个方法。当然我们可以使用适配器 SimpleFileVisitor 类,只重写我们需要的方法。
4个方法的返回值类型均是FileVisitResult,FileVisitReset是一个枚举类。代表访问此文件/文件夹后的后续行为。可使用的值:
- CONTINUE 继续访问(/遍历)
- TERMINATE 停止访问(/遍历)
- SKIP_SUBTREE 继续访问,但不访问此文件/文件夹的子目录树
- SKIP_SIBLINGS 继续访问,但不访问此文件/文件夹的兄弟文件/文件夹。
需要以 FileVisitResult. 的形式引用,示例:FileVisitResult.CONTINUE
示例:输出每个文件、文件夹的名称。
Path path=Paths.get("D:\\二次元");
Files.walkFileTree(path,new FileVisitor<Path>(){
//访问文件夹之前自动调用此方法
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
System.out.println(dir.getFileName());
return FileVisitResult.CONTINUE;
}
//访问文件时自动调用此方法
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println(file.getFileName());
return FileVisitResult.CONTINUE;
}
//访问文件失败时自动调用此方法
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
//访问文件夹之后自动调用此方法
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
return FileVisitResult.CONTINUE;
}
});
作为根的文件夹(上例中的“二次元”)也算作一个遍历的节点。
PreVisitDirectory()、PostVisitDirectory()、VisitFile()这3个方法,不能返回null,如果返回null,编译时ok,但运行时往往会报错——空指针异常。IDEA下的代码自动完成,4个方法的默认实现都是return null,需要注意。
Java的工具类的命名一般是在对应类后面加一个s。比如:
Collection Collections
Array Arrays
File Files
FileSystem FileSystems
Java NIO.2 使用Files类遍历文件夹的更多相关文章
- 转载Java NIO中的Files类的使用
Java NIO中的Files类(java.nio.file.Files)提供了多种操作文件系统中文件的方法. Files.exists() Files.exits()方法用来检查给定的Path在文件 ...
- java学习笔记——IO部分(遍历文件夹)
用File类写的一个简单的工具,遍历文件夹,获取该文件夹下的所以文件(含子目录下的文件)和文件大小: /** * 列出指定目录下(包含其子目录)的所有文件 * @author syskey * */ ...
- java File基本操作,以及递归遍历文件夹
java 的文件操作,相对来说是比较重要的,无论是编写CS还是BS程序,都避免不了要与文件打交道,例如读写配置文件等.虽然现在很多框架都直接帮你做好了这一步! java.io.File 底层是调用与c ...
- File类创建删除功能的方法和File类遍历(文件夹)目录功能
File类创建删除功能的方法 -public boolean createNewFile():当且仅当具有该名称的文件尚不存在时,创建一个新的空文件 -public boolean delete(): ...
- 阶段1 语言基础+高级_1-3-Java语言高级_06-File类与IO流_01 File类_8_File类遍历(文件夹)目录功能
遍历这个目录下的文件 遍历一个文件就会报错’ 不存在的路径,也会报空指针异常 遍历可以获取到隐藏的文件夹和文件.常见一个隐藏的文件和文件夹 ListFiles私有类型的数组
- Java File类应用:递归遍历文件夹和递归删除文件
要求: 1)采用递归遍历文件夹下的所有文件,包括子文件夹下的文件 2)采用递归删除文件下的所有文件 注意: 以下递归删除文件的方法,只能删除文件,所有的文件夹都还会存在 若要删除正文文件夹,可以在递归 ...
- java中File类应用:遍历文件夹下所有文件
练习: 要求指定文件夹下的所有文件,包括子文件夹下的文件 代码: package 遍历文件夹所有文件; import java.io.File; public class Test { public ...
- Java NIO 学习笔记(四)----文件通道和网络通道
目录: Java NIO 学习笔记(一)----概述,Channel/Buffer Java NIO 学习笔记(二)----聚集和分散,通道到通道 Java NIO 学习笔记(三)----Select ...
- java 遍历文件夹里的文件
Java遍历文件夹的2种方法: A.不使用递归: import java.io.File; import java.util.LinkedList; public class FileSystem { ...
随机推荐
- hadoop完全分布式集群的搭建
集群配置: jdk1.8.0_161 hadoop-2.6.1 linux系统环境:Centos6.5 创建普通用户 dummy 准备三台虚拟机master,slave01,slave02 hado ...
- 随手正则写的 CSDN【只看楼主】功能
写这个的时候居然没有看到原来CSDN已经有这个功能了,写完代码了突然发现原来早就已经有了. 现把代码贴出来吧,虽然有很多解析HTML的开源类库如:http://htmlagilitypack.code ...
- Leetcode 518.零钱兑换II
零钱兑换II 给定不同面额的硬币和一个总金额.写出函数来计算可以凑成总金额的硬币组合数.假设每一种面额的硬币有无限个. 注意: 你可以假设 0 <= amount (总金额) <= 500 ...
- pb8.0 mssqlserver 新建数据库连接问题
将ntwdblib.DLL复制到Sybase\Shared\PowerBuilder目录下 unable to load the requested database interface,无法创建数据 ...
- Python面向对象之常用的特殊方法(5)
Python面向对象里面有很多特殊方法,例如__init__(构造方法),__del__(析构方法),这些方法对于面向对象编程非常重要,下面列出一些常用的特殊方法 (1)__call__ class ...
- scp -v 查看具体的过程
前几天跟同事讨论scp 多个文件和 scp多个文件夹的压缩包那个快. 老大说,压缩包快,压缩包传输可以避免每个文件的重建连接,不过文件系统的遍历.目录创建.检验会有一些开销. 他建议我scp -v看下 ...
- Android之操作相册
获取手机中的图片的绝对路径并且区分出每个文件夹下的路径: 存放图片绝对路径的文件夹的名字和存放绝对路径的List 实体类如下: import java.util.ArrayList; import j ...
- OAuth 开放授权
什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密 ...
- ruby linux连接windows执行dos命令
在整个开发流程中,gitlab-runner-ci是搭建在linux下.web自动化是在windows下面进行的. 如果ci构建完版本.部署完后,需要触发启动自动化执行. 那么我们需要在部署完后在li ...
- iptables端口转发命令
需求很简单,把本地81端口映射到8080端口上 1. 所有的81请求转发到了8080上. 1 # iptables -t nat -A PREROUTING -p tcp --dport 81 - ...