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 { ...
随机推荐
- Diycode开源项目 ImageActivity分析
1.首先看一下效果 1.1做成了一个GIF 1.2.我用格式工厂有点问题,大小无法调到手机这样的大小,目前还没有解决方案. 1.3.网上有免费的MP4->GIF,参考一下这个网站吧. 1.4.讲 ...
- codeforce GYM 100741 A Queries
A. Queries time limit per test:0.25 s memory limit per test:64 MB input:standard input output:standa ...
- tensorboard在cmd运行成功但在浏览器中不能正常显示的问题解决
我是配置了两个python环境,python3.5和anconda3.5,强烈建议使用python3.5版本,算是比较稳定的! cmd在运行时是按顺序查找的文件,如果说是python3.6这个版本问 ...
- 设计模式之第12章-享元模式(Java实现)
设计模式之第12章-享元模式(Java实现) “怎么回事,竟然出现了OutOfMemory的错误.鱼哥,来帮我看看啊.”“有跟踪错误原因么?是内存泄露么?”“不是内存泄露啊,具体原因不知道啊.对了,有 ...
- Python+Selenium练习篇之13-获取当前页面的URL
本文介绍如何通过webdriver方法获取当前测试页面的URL.获取当前URL有什么用处呢,一般URL可以帮助我们判断跳转的页面是否正确,或者URL中部分字段可以作为我们自动化测试脚本期待结果的一部分 ...
- 04 JVM是如何执行方法调用的(下)
虚方法调用 Java 里所有非私有实例方法调用都会被编译成 invokevirtual 指令,而接口方法调用会被编译成 invokeinterface 指令.这两种指令,均属于 Java 虚拟机中的虚 ...
- Hadoop第三课
1.3Hadoop基础知识 1.3.1术语解释 1.Hadoop1.0 • 第一代Hadoop,由分布式文件系统HDFS 和分布式计算框架MapReduce组成 • HDFS由一个NameNode和多 ...
- [oldboy-django][2深入django]Form总结
1 form总结 # Form数据格式验证 - 原理: - 流程 a.写类LoginForm(Form): 字段名 = fields.xxFields() # 验证规则,本质是正则表达式(fields ...
- Spring Cloud Eureka简单入门
步骤: 1.创建父工程 2.创建EurekaServer工程 3.创建EurekaClient工程 父工程pom.xml <?xml version="1.0" encodi ...
- js验证密码强弱
JS密码强度验证 <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML ...