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

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

阅读更多

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

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

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
5
2
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics