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 { ...
随机推荐
- 非常好用的CSS样式重置表
非常好用的CSS样式重置表 我们在项目前期准备时都会准备好一个reset.css,因为不同浏览器对标签的解析各不相同,重置css样式可以让标签在不同浏览器下产生相同的效果.所以一个 ...
- P1194 买礼物(建模)
P1194 买礼物 题目描述 又到了一年一度的明明生日了,明明想要买B样东西,巧的是,这B样东西价格都是A元. 但是,商店老板说最近有促销活动,也就是: 如果你买了第I样东西,再买第J样,那么就可以只 ...
- 59、佳博wifi打印机怎么配置
1.去这里下载配置软件(注意,需要再windows下进行)http://pan.baidu.com/s/1bn1y4FX,并解压安装程序 2.连上wifi打印机的热点,比如说佳博打印机的默认为Gpri ...
- leetcode 【 Convert Sorted List to Binary Search Tree 】python 实现
题目: Given a singly linked list where elements are sorted in ascending order, convert it to a height ...
- Python_字符串操作
name='hu\tqihang' #\t是TAB键 1.打印相关 print(name.center(50,'-')) #一共打印50个字符,不够的 ...
- 菜鸟之路——Linux基础::计算机网络基础,Linux常用系统命令,Linux用户与组权限
最近又重新安排了一下我的计划.准备跟着老男孩的教程继续学习,感觉这一套教程讲的很全面,很详细.比我上一套机器学习好的多了. 他的第一阶段是Python基础,第二阶段是高等数学基础,主要将机器学习和深度 ...
- [译]从列表或字典创建Pandas的DataFrame对象
原文来源:http://pbpython.com/pandas-list-dict.html 介绍 每当我使用pandas进行分析时,我的第一个目标是使用众多可用选项中的一个将数据导入Pandas的D ...
- LINUX 常用指令学习
目录 0 查找find 1 别名alias 2 变量的设置 3 常用的系统变量 4 通配符及组合按键 5 指令之间的分隔符(;&||) 6 输出重定向(>,>>,1>, ...
- BZOJ 1855: [Scoi2010]股票交易(DP+单调队列)
1855: [Scoi2010]股票交易 Description 最近lxhgww又迷上了投资股票,通过一段时间的观察和学习,他总结出了股票行情的一些规律. 通过一段时间的观察,lxhgww预测到了未 ...
- 【bzoj4668】冷战 并查集按秩合并+朴素LCA
题目描述 1946 年 3 月 5 日,英国前首相温斯顿·丘吉尔在美国富尔顿发表“铁幕演说”,正式拉开了冷战序幕. 美国和苏联同为世界上的“超级大国”,为了争夺世界霸权,两国及其盟国展开了数十年的斗争 ...