`
janeky
  • 浏览: 366536 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JDK7新特性<七> 遍历文件树

    博客分类:
  • jdk7
阅读更多

 

有时需要递归遍历一个文件树,比如查找一个文件夹内符合条件的文件,查找某一天创建的文件……。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 –兄弟节点(同级别目录)不再访问了。

可以通过这些返回值来控制遍历文件树的流程

更多的jdk7文章,欢迎访问http://janeky.iteye.com/category/157060
3
0
分享到:
评论

相关推荐

    JDK7新特性(完整篇)

    7. **JDK7新特性&lt;七&gt; 遍历文件树** 新增的遍历文件树API简化了对文件系统深层次结构的遍历,开发者可以方便地递归遍历整个目录结构,进行批量处理或搜索操作。 8. **JDK7新特性&lt;八&gt; 异步io/AIO** 异步I/O...

    JDK 7新特性的PPT(本届JAVAONE 2010的演讲材料)

    Java Development Kit (JDK) 的第七个主要版本,即 JDK 7(也称为 Java SE 7),引入了一系列新特性,以提高开发者的效率、增强语言功能并优化性能。这次更新是基于 Project Coin 的概念,它是一系列小规模的语言...

    AIC的Java课程1-6章

    第3版 机械工业出版社&lt;br&gt; 教学内容和要求&lt;br&gt;知识点 重要程度 使用频度 难度&lt;br&gt;Java 入门 高 中 易&lt;br&gt;变量和运算符 高 高 中&lt;br&gt;控制结构...br&gt;IO和串行化 高 中 难&lt;br&gt;知识点 重要程度 使用频度 难度&lt;br&gt;&lt;br&gt;第1章...

    详细介绍JDK1.5的各种新特性

    以下是JDK1.5中的主要新特性及其详细解释: 1. **泛型(Generics)**:泛型是JDK1.5引入的最大变革之一。它允许在类、接口和方法中使用类型参数,提高了代码的类型安全性和重用性。泛型帮助程序员在编译时检查类型...

    ojdbc8的maven依赖

    ojdbc8是Oracle JDBC驱动程序的第12c版本,支持Java 8的特性,包括新的SQL标准和性能优化。它提供了与Oracle数据库的全面交互,包括数据查询、事务处理、批处理操作等。 在Maven项目中,添加ojdbc8的依赖需要在`pom...

    jdk7 msi 安装包

    3. **类型推断 for钻石操作符**:在创建泛型对象时,JDK 7 可以省略类型参数,编译器会根据上下文推断出类型,如 `List&lt;String&gt; list = new ArrayList&lt;&gt;();`,这种写法被称为钻石操作符。 4. **File API增强**:新...

    jdk5新特性

    虽然NIO.2是在JDK 7中正式引入的,但其基础始于JDK 5,包括文件系统API、异步通道组和文件属性等,极大地改善了Java的I/O性能。 这些新特性极大地提升了Java的开发效率和代码质量,使得JDK 5成为Java发展历程中的...

    JDK7 API 中文 文档.CHM

    1. **语言特性:**JDK7引入了一些新的语言特性,如**自动资源管理**(try-with-resources)、**多线程并发工具**的增强、**钻石操作符**(&lt;&gt;)简化泛型实例化、**字符串内联**优化、**类型推断**增强等。这些新特性极...

    JDK1.7(JavaSE1.7/JDK7)

    在类型推断方面,JDK7引入了“钻石操作符”(&lt;&gt;),使得在创建泛型对象时,编译器能够自动推断类型,减少了代码中的冗余。例如,`List&lt;String&gt; list = new ArrayList&lt;&gt;();` 这样的写法在JDK7中成为可能。 JDK7还增强...

    jdk-7u79-windows-x64.exe

    其次,JDK7引入了钻石操作符(&lt;&gt;),用于简化匿名内部类和泛型实例化时的类型推断,使得代码更易读: ```java List&lt;String&gt; list = new ArrayList&lt;&gt;(); ``` 此外,增强的for循环(也称为foreach循环)在JDK7中得到...

    Jdk7解压打包版本

    7. **文件系统API(NIO.2)**:Java 7引入了新的文件系统API,即JSR 170,提供了更强大、更灵活的文件操作功能,例如递归删除目录、遍历文件树等。 8. **改进的编译器(javac)**:Javac在JDK 7中得到了优化,能够...

    jdk7jdk-7u65-windows-x64.rar

    2. **钻石操作符**:在创建泛型对象时,可以省略类型参数的显式指定,如`new ArrayList&lt;&gt;()`。编译器会根据上下文推断出类型。 3. **字符串切片**:通过使用`substring()`方法的两个参数,可以快速获取字符串的一个...

    jdk1.5 1.6 1.7的新特征总结

    【JDK1.5新特性】 1. 泛型(Generic) JDK1.5引入了泛型,这是对类型安全的重要改进。泛型允许在集合类中指定元素的类型,确保了在编译时就能进行类型检查,避免了运行时的强制类型转换和可能的ClassCastException...

    jdk1.7.0_17

    Java 7还引入了钻石操作符(&lt;&gt;),用于简化匿名内部类和泛型实例化时的类型推断。在Java 6及更早版本中,你需要明确指定类型参数,如 `new ArrayList&lt;String&gt;()`,但在Java 7中,你可以写成 `new ArrayList&lt;&gt;()`。 ...

    jdk新特性,如加强for等

    Java JDK的更新不断引入了许多新特性,以提升开发效率和代码质量。在标题和描述中提到的"加强for",也被称为增强for循环或foreach循环,是JDK 5.0引入的一个重要特性。增强for循环极大地简化了对集合、数组等可迭代...

    jdk1.7.0_51,jdk6,Oracle官方已经不再提供jdk6、7的下载

    **Java 7 (JDK 1.7)**,发布于2011年,是Java 6的一个重要升级,引入了大量新特性和改进,包括: 1. **钻石运算符**:在创建泛型对象时可以省略类型参数,如`List&lt;String&gt; list = new ArrayList&lt;&gt;();` 2. **尝试-...

    jdk-7u45-windows-i586

    5. **NIO.2(新I/O API)**: JDK 7引入了全新的文件系统API,提供了异步文件操作、文件属性视图、遍历文件树等功能,大大增强了Java对文件系统操作的能力。 6. **类型注解**: 类型注解允许在类型签名(包括类、接口...

    JDK1.5的五大新特性

    根据给定文件的信息,本文将详细介绍JDK 1.5中的五大新特性,这些特性显著提高了Java编程的效率和安全性。 ### 1. 泛型 (Generics) JDK 1.5 中引入的泛型功能是其中最重要的新特性之一。在引入泛型之前,Java 中的...

    JDK8有一些我们最常用的新特性

    **正文** JDK8是Java发展历程中的一个重要里程碑,它引入了一系列新特性,极大地提升了开发者的工作效率和代码质量。...通过学习和实践压缩包中的"jdk8NewProperty"文件,你将能够更好地理解和运用这些JDK8的新特性。

    jdk1.7.0_17版本 jdk7

    2. **类型推断**:Java 7的钻石操作符(&lt;&gt;)使得在创建泛型实例时,编译器能够自动推断类型,减少了冗余代码。 3. **try-with-resources**:这个特性允许在try语句块中声明资源,如数据库连接或文件流,当try结束时...

Global site tag (gtag.js) - Google Analytics