Java递归搜索指定目录下具有某个后缀名的所有文件_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java递归搜索指定目录下具有某个后缀名的所有文件

Java递归搜索指定目录下具有某个后缀名的所有文件

 2013/10/17 0:37:27  MouseLearnJava  程序员俱乐部  我要评论(0)
  • 摘要:本文简单记录一下一个简单功能:递归搜索指定目录下具有某个后缀名的所有文件。在JDK1.7之前,我会使用类似如下的办法:packagemy.utils.algorithm.files;importjava.io.File;importjava.util.ArrayList;importjava.util.List;publicclassFileFinder{publicstaticvoidmain(String[]args){FileFinderfinder=newFileFinder()
  • 标签:目录 文件 Java 递归

本文简单记录一下一个简单功能:递归搜索指定目录下具有某个后缀名的所有文件。

在JDK 1.7之前,我会使用类似如下的办法:

class="java">package my.utils.algorithm.files;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class FileFinder {

	public static void main(String[] args) {
		FileFinder finder = new FileFinder();

		List<String> filenameList = new ArrayList<String>();

		finder.findFiles(".java" , "D:\\workspace\\AlgorithmUtils\\src", filenameList);

		/**
		 * 打印出结果
		 */
		for (String filename : filenameList) {
			System.out.println(filename);
		}
	}

	/**
	 * 寻找指定目录下,具有指定后缀名的所有文件。
	 * 
	 * @param filenameSuffix : 文件后缀名
	 * @param currentDirUsed : 当前使用的文件目录
	 * @param currentFilenameList :当前文件名称的列表
	 */
	public void findFiles(String filenameSuffix, String currentDirUsed,
			List<String> currentFilenameList) {
		File dir = new File(currentDirUsed);
		if (!dir.exists() || !dir.isDirectory()) {
			return;
		}

		for (File file : dir.listFiles()) {
			if (file.isDirectory()) {
				/**
				 * 如果目录则递归继续遍历
				 */
				findFiles(filenameSuffix,file.getAbsolutePath(), currentFilenameList);
			} else {
				/**
				 * 如果不是目录。
				 * 那么判断文件后缀名是否符合。
				 */
				if (file.getAbsolutePath().endsWith(filenameSuffix)) {
					currentFilenameList.add(file.getAbsolutePath());
				}
			}
		}
	}
	
}


输出结果:
D:\workspace\AlgorithmUtils\src\my\eclipse\serial\MyEclipseGen.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\files\FileFinder.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\files\FileUtils.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\files\FileVisitorUtil.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\sudoku\Main.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\sudoku\SudokuPuzzleGenerator.java

如果使用的是JDK 1.7,那么Files.walkFileTree会是一个很好的选择。这个类位于java.nio.file包下,这个包是JDK 1.7中新增的。

样例代码如:
package my.utils.algorithm.files;

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;
import java.util.ArrayList;
import java.util.List;

public class FileVisitorUtil {
	public static void main(String[] args) throws IOException {
		
		Path startingDir = Paths.get("D:\\workspace\\AlgorithmUtils\\src");
		
		FindFileVisitor findJavaVisitor = new FindFileVisitor(".java");
		
		Files.walkFileTree(startingDir, findJavaVisitor);

		for (String name : findJavaVisitor.getFilenameList()) {
			System.out.println(name);
		}
	}
}

class FindFileVisitor extends SimpleFileVisitor<Path> {

	private List<String> filenameList = new ArrayList<String>();

	private String fileSuffix = null;

	public FindFileVisitor(String fileSuffix) {
		this.fileSuffix = fileSuffix;
	}

	@Override
	public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) {

		if (file.toString().endsWith(fileSuffix)) {
			filenameList.add(file.toString());
		}
		return FileVisitResult.CONTINUE;
	}

	public List<String> getFilenameList() {
		return filenameList;
	}

	public void setFilenameList(List<String> filenameList) {
		this.filenameList = filenameList;
	}


}


输出结果:
D:\workspace\AlgorithmUtils\src\my\eclipse\serial\MyEclipseGen.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\files\FileFinder.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\files\FileUtils.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\files\FileVisitorUtil.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\sudoku\Main.java
D:\workspace\AlgorithmUtils\src\my\utils\algorithm\sudoku\SudokuPuzzleGenerator.java
上一篇: 基于Java阻塞队列的搜索实例 下一篇: 没有下一篇了!
发表评论
用户名: 匿名