JDK7之新的遍历目录API

jdk7之前,我们遍历目录,一般都是判断当前文件是普通文件和目录文件,从而递归的遍历其子目录,利用file 过滤,过滤出符合我们需要的文件。

这种都是需要我们显示的写递归程序的,不过JDK7新增加的新类Paths、Files方便了我们对目录的操作。

下面例子是寻找某一目录下所有java源程序文件的代码:

public class FindingFilesInADirectory {

	public static void main(String[] args) {
		Path path = Paths.get("src/main/java/com/doctor/java7/");

		try (DirectoryStream<Path> directoryStream = Files.newDirectoryStream(path, "*.java")) {

			directoryStream.forEach(p -> System.out.println(p.getFileName()));

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

查询结果:

UsingTryWithResourcesBlock.java
RetrievingInformationFromPath.java
FindingFilesInADirectory.java
EnhancedSyntaxForNumericLiterals.java
CreatingAResourceThatCanBeUsedWithTheTryWithResourcesTechnique.java
WalkingTheDirectoryTree.java
UsingStringLiteralsInSwitchStatements.java

遍历目录树也很简单,示例如下:

public class WalkingTheDirectoryTree {

	public static void main(String[] args) throws IOException {
		Path path = Paths.get("src/");
		Files.walkFileTree(path, new SimpleFileVisitor<Path>() {

			@Override
			public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
				if (file.toString().endsWith(".java")) {
					System.out.println(file);
				}
				return FileVisitResult.CONTINUE;
			}
		});

	}

}

有jdk7新增的Paths、Files类,我们对文件、目录的操作比以前省事了许多。

版权声明:本文为博主原创文章,未经博主允许不得转载[http://blog.csdn.net/doctor_who2004]。

时间: 2024-10-15 20:29:58

JDK7之新的遍历目录API的相关文章

c#调用api(FindFirstFile,FindNextFile)高效遍历目录文件【转载】

在c#下遍历目录,应用最多的应该就是 System.IO.DirectoryInfo.GetDirectories或GetFiles了,但是当目录特别大,文件特别多时,效率不尽人意,此时我们很容易想到三个Win32API函数 FindFirstFile,FindNextFile和FindClose.这三个API搭配使用就能遍历文件和子目录了,而且可以遍历的时候随时中止,避免无谓的操作.在网上搜了一下,发现这方面的文章转载最多的应该就是http://www.cnblogs.com/xdesigne

jdk7的新特性

在jdk7的新特性方面主要有下面几方面的增强: 1.jdk7语法上 1.1二进制变量的表示,支持将整数类型用二进制来表示,用0b开头. // 所有整数 int, short,long,byte都可以用二进制表示 // An 8-bit 'byte' value: byte aByte = (byte) 0b00100001; // A 16-bit 'short' value: short aShort = (short) 0b1010000101000101; // Some 32-bit '

java基础(1)-比较jdk5,jdk6,jdk7的新特性

jdk8已经出来好长时间了,这里自己学习时简单总结的jdk5,jdk6和jdk7的新特性:本文提纲: 一.jdk5的新特性 二.jdk6的新特性 三.jdk7的新特性 一.jdk5的新特性 首先简单介绍一下各种特性及其使用 1.泛型(Generic)C++通过模板技术可以指定集合的元素类型,而Java在1.5之前一直没有相对应的功能.一个集合可以放任何类型的对象, 相应地从集合里面拿对象的时候我们也不得不对他们进行强制得类型转换.猛虎引入了泛型,它允许指定集 Collection<String>

C/C++遍历目录下的所有文件(Windows篇,超详细)

注:本文讨论的是怎么用Windows API遍历目录下的所有文件.除Windows API,还有一种Windows/Linux通用的方式,使用<io.h>. WIN32_FIND_DATA结构 遍历目录下的文件需要用到WIN32_FIND_DATA结构.实际上有两种结构:WIN32_FIND_DATAA和WIN32_FIND_DATAW.A和W分别代表ASCII和宽字符(Unicode).定义UNICODE宏时,WIN32_FIND_DATA指WIN32_FIND_DATAW:否则指WIN32

遍历 目录的几种有效办法

这一两个月来到新公司 刚好赶上项目进度,加班有点多,忘了记录点什么..刚刚商品上传扫描 这块用上了之前研究的 目录相关技巧的 知识,很开心:当然下一期的 迭代器的讲解更有意思 ^-^: 传统扫描目录(我基本弃用了): /********************** 一个简单的目录递归函数 第一种实现办法:用dir返回对象 ***********************/ function tree($directory) { $mydir = dir($directory); echo "<

IO-文件 遍历 目录 删除【工具】

文件遍历器 获取指定目录及其子目录下的指定格式文件的文件 FileUtils.listDirFiles(path, null,true/false); 1 FileUtils.listDirFiles(path, null,true/false); FileUtils.listDirFiles(path, new MyFilenameFilter(".java", 1024), false); x 1 FileUtils.listDirFiles(path, new MyFilenam

Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的特点

1.不变性 新的日期/时间API中,所有的类都是不可变的,这对多线程环境有好处. 比如:LocalDateTime 2.关注点分离 新的API将人可读的日期时间和机器时间(unix timestamp)明确分离,它为日期(Date).时间(Time).日期时间(DateTime).时间戳(unix timestamp)以及时区定义了不同的类. 不同时间分解成了各个类,比如:LocalDate, LocalTime, LocalDateTime, Instant,Year,Month,YearMo

Java日期时间API系列8-----Jdk8中java.time包中的新的日期时间API类的LocalDate源码分析

目录 0.前言 1.TemporalAccessor源码 2.Temporal源码 3.TemporalAdjuster源码 4.ChronoLocalDate源码 5.LocalDate源码 6.总结 0.前言 通过前面Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类中主要的类关系简图如下: 可以看出主要的LocalDate, LocalTime, LocalDateTime, Instant都是实现相同的接口,这里以LocalDate为例分析jav

Java日期时间API系列11-----Jdk8中java.time包中的新的日期时间API类,使用java8日期时间API重写农历LunarDate

通过Java日期时间API系列7-----Jdk8中java.time包中的新的日期时间API类的优点,java8具有很多优点,现在网上查到的农历转换工具类都是基于jdk7及以前的类写的,下面使用java新的日期时间API重写农历LunarDate. package com.xkzhangsan.time; import java.time.Instant; import java.time.LocalDate; import java.time.LocalDateTime; import ja