有时需要递归遍历一个文件树,比如查找一个文件夹内符合条件的文件,查找某一天创建的文件……。jdk7 nio包提供一个新的接口 FileVisitor。它提供了遍历文件树的各种操作。
preVisitDirectory - 一个路径被访问时调用
PostVisitDirectory - 一个路径的所有节点被访问后调用。如果有错误发生,exception会传递给这个方法
visitFile - 文件被访问时被调用。该文件的文件属性被传递给这个方法
visitFileFailed - 当文件不能被访问时,此方法被调用。Exception被传递给这个方法。
如果你比较懒,不想实现所有方法。你可以选择继承 SimpleFileVisitor。它帮你实现了上述方法,你只需Override 你感兴趣的方法。
下面给个例子,简单地遍历一个文件夹,打印出所有信息
import java.io.IOException;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
/**
* @author kencs@foxmail.com
*/
public class FileVisitorTest extends SimpleFileVisitor<Path> {
private void find(Path path){
System.out.printf("访问-%s:%s%n",(Files.isDirectory(path)?"目录":"文件"),path.getFileName());
}
@Override
public FileVisitResult visitFile(Path file,BasicFileAttributes attrs){
find(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult preVisitDirectory(Path dir,BasicFileAttributes attrs){
find(dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file,IOException e){
System.out.println(e);
return FileVisitResult.CONTINUE;
}
public static void main(String[] args) throws IOException{
if(args.length!=1){
System.out.println("请输入一个文件路径作为参数");
System.exit(-1);
}
Files.walkFileTree(Paths.get( args[0]), new FileVisitorTest());
}
}
随便选择一个路径作为参数
java FileVisitorTest "C:\\Program Files\\Java\\jre7\\bin"
访问-目录:bin
访问-文件:awt.dll
访问-文件:axbridge.dll
访问-目录:client
访问-文件:classes.jsa
访问-文件:jvm.dll
访问-文件:Xusage.txt
访问-文件:dcpr.dll
访问-文件:deploy.dll
访问-文件:deployJava1.dll
访问-文件:dt_shmem.dll
访问-文件:dt_socket.dll
......
注意 FileVisitResult有四种
CONTINUE –继续
TERMINATE –终止,这次遍历结束了
SKIP_SUBTREE –子树(当前路径的子目录)不再遍历了
SKIP_SIBLINGS –兄弟节点(同级别目录)不再访问了。
可以通过这些返回值来控制遍历文件树的流程
分享到:
相关推荐
7. **JDK7新特性<七> 遍历文件树** 新增的遍历文件树API简化了对文件系统深层次结构的遍历,开发者可以方便地递归遍历整个目录结构,进行批量处理或搜索操作。 8. **JDK7新特性<八> 异步io/AIO** 异步I/O...
Java Development Kit (JDK) 的第七个主要版本,即 JDK 7(也称为 Java SE 7),引入了一系列新特性,以提高开发者的效率、增强语言功能并优化性能。这次更新是基于 Project Coin 的概念,它是一系列小规模的语言...
第3版 机械工业出版社<br> 教学内容和要求<br>知识点 重要程度 使用频度 难度<br>Java 入门 高 中 易<br>变量和运算符 高 高 中<br>控制结构...br>IO和串行化 高 中 难<br>知识点 重要程度 使用频度 难度<br><br>第1章...
以下是JDK1.5中的主要新特性及其详细解释: 1. **泛型(Generics)**:泛型是JDK1.5引入的最大变革之一。它允许在类、接口和方法中使用类型参数,提高了代码的类型安全性和重用性。泛型帮助程序员在编译时检查类型...
ojdbc8是Oracle JDBC驱动程序的第12c版本,支持Java 8的特性,包括新的SQL标准和性能优化。它提供了与Oracle数据库的全面交互,包括数据查询、事务处理、批处理操作等。 在Maven项目中,添加ojdbc8的依赖需要在`pom...
3. **类型推断 for钻石操作符**:在创建泛型对象时,JDK 7 可以省略类型参数,编译器会根据上下文推断出类型,如 `List<String> list = new ArrayList<>();`,这种写法被称为钻石操作符。 4. **File API增强**:新...
虽然NIO.2是在JDK 7中正式引入的,但其基础始于JDK 5,包括文件系统API、异步通道组和文件属性等,极大地改善了Java的I/O性能。 这些新特性极大地提升了Java的开发效率和代码质量,使得JDK 5成为Java发展历程中的...
1. **语言特性:**JDK7引入了一些新的语言特性,如**自动资源管理**(try-with-resources)、**多线程并发工具**的增强、**钻石操作符**(<>)简化泛型实例化、**字符串内联**优化、**类型推断**增强等。这些新特性极...
在类型推断方面,JDK7引入了“钻石操作符”(<>),使得在创建泛型对象时,编译器能够自动推断类型,减少了代码中的冗余。例如,`List<String> list = new ArrayList<>();` 这样的写法在JDK7中成为可能。 JDK7还增强...
其次,JDK7引入了钻石操作符(<>),用于简化匿名内部类和泛型实例化时的类型推断,使得代码更易读: ```java List<String> list = new ArrayList<>(); ``` 此外,增强的for循环(也称为foreach循环)在JDK7中得到...
7. **文件系统API(NIO.2)**:Java 7引入了新的文件系统API,即JSR 170,提供了更强大、更灵活的文件操作功能,例如递归删除目录、遍历文件树等。 8. **改进的编译器(javac)**:Javac在JDK 7中得到了优化,能够...
2. **钻石操作符**:在创建泛型对象时,可以省略类型参数的显式指定,如`new ArrayList<>()`。编译器会根据上下文推断出类型。 3. **字符串切片**:通过使用`substring()`方法的两个参数,可以快速获取字符串的一个...
【JDK1.5新特性】 1. 泛型(Generic) JDK1.5引入了泛型,这是对类型安全的重要改进。泛型允许在集合类中指定元素的类型,确保了在编译时就能进行类型检查,避免了运行时的强制类型转换和可能的ClassCastException...
Java 7还引入了钻石操作符(<>),用于简化匿名内部类和泛型实例化时的类型推断。在Java 6及更早版本中,你需要明确指定类型参数,如 `new ArrayList<String>()`,但在Java 7中,你可以写成 `new ArrayList<>()`。 ...
Java JDK的更新不断引入了许多新特性,以提升开发效率和代码质量。在标题和描述中提到的"加强for",也被称为增强for循环或foreach循环,是JDK 5.0引入的一个重要特性。增强for循环极大地简化了对集合、数组等可迭代...
**Java 7 (JDK 1.7)**,发布于2011年,是Java 6的一个重要升级,引入了大量新特性和改进,包括: 1. **钻石运算符**:在创建泛型对象时可以省略类型参数,如`List<String> list = new ArrayList<>();` 2. **尝试-...
5. **NIO.2(新I/O API)**: JDK 7引入了全新的文件系统API,提供了异步文件操作、文件属性视图、遍历文件树等功能,大大增强了Java对文件系统操作的能力。 6. **类型注解**: 类型注解允许在类型签名(包括类、接口...
根据给定文件的信息,本文将详细介绍JDK 1.5中的五大新特性,这些特性显著提高了Java编程的效率和安全性。 ### 1. 泛型 (Generics) JDK 1.5 中引入的泛型功能是其中最重要的新特性之一。在引入泛型之前,Java 中的...
**正文** JDK8是Java发展历程中的一个重要里程碑,它引入了一系列新特性,极大地提升了开发者的工作效率和代码质量。...通过学习和实践压缩包中的"jdk8NewProperty"文件,你将能够更好地理解和运用这些JDK8的新特性。
2. **类型推断**:Java 7的钻石操作符(<>)使得在创建泛型实例时,编译器能够自动推断类型,减少了冗余代码。 3. **try-with-resources**:这个特性允许在try语句块中声明资源,如数据库连接或文件流,当try结束时...