package cn.yws.getfilepath;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
/**
* Java递归和非递归遍历目录
* @author Administrator
*
*/
public class FileSystem {
public static void main(String[] args) {
long a = System.currentTimeMillis();
List<File> resultfiles = new ArrayList<File>();
String[] lists = { "D:\\android\\androidNDK" };
/*
for (int i = 0; i < lists.length; i++) {
File file = new File(lists[i]);
scanDirRecursion(file, resultfiles, "java");
}
for (File file : resultfiles) {
System.out.println(file.getAbsolutePath());
}*/
for (int i = 0; i < lists.length; i++) {
File file = new File(lists[i]);
scanDirNoRecursion(file, resultfiles, "java");
}
for (File file : resultfiles) {
System.out.println(file.getAbsolutePath());
}
System.out.print("文件总数:" + resultfiles.size());
System.out.print("总耗时:");
System.out.println((System.currentTimeMillis() - a) + "ms");
System.out.println((System.currentTimeMillis() - a) / 1000 + "s");
}
/**
* 非递归遍历目录
*
* @param file
* 文件目录
* @param resultfiles
* 保存返回的结果集
* @param endWith
* 为null,则返回所有文件,不为空,则返回所匹配的文件
*/
public static void scanDirNoRecursion(File dir, List<File> resultfiles,
String endWith) {
LinkedList<File> list = new LinkedList<File>();
File file[] = dir.listFiles();
for (int i = 0; i < file.length; i++) {
if (file[i].isDirectory())
list.add(file[i]);
else {
// System.out.println(file[i].getAbsolutePath());
if (file[i].getName().toLowerCase().endsWith(endWith.toLowerCase())) {
resultfiles.add(file[i]);
}
}
}
File tmp;
while (!list.isEmpty()) {
tmp = list.removeFirst();// 首个目录
if (tmp.isDirectory()) {
file = tmp.listFiles();
if (file == null)
continue;
for (int i = 0; i < file.length; i++) {
if (file[i].isDirectory())
list.add(file[i]);// 目录则加入目录列表,关键
else {
// System.out.println(file[i]);
if (endWith != null) {
if (file[i].getName().toLowerCase().endsWith(endWith.toLowerCase()))
resultfiles.add(file[i]);
} else {
resultfiles.add(file[i]);
}
}
}
} else {
// System.out.println(tmp);
if (endWith != null) {
if (tmp.getName().toLowerCase().endsWith(endWith.toLowerCase()))
resultfiles.add(tmp);
} else {
resultfiles.add(tmp);
}
}
}
}
/**
* 递归遍历目录
*
* @param file
* 文件目录
* @param resultfiles
* 保存返回的结果集
* @param endWith
* 为null,则返回所有文件,不为空,则返回所匹配的文件
*/
public static void scanDirRecursion(File file, List<File> resultfiles,
String endWith) {
try {
if (file.canRead()) {
if (file.isDirectory()) {
String[] files = file.list();
if (files != null) {
for (int i = 0; i < files.length; i++) {
scanDirRecursion(new File(file, files[i]),
resultfiles, endWith);
}
}
} else {
// System.out.println(file);
if (endWith != null) {
if (file.getName().toLowerCase().endsWith(endWith.toLowerCase()))
resultfiles.add(file);
} else {
resultfiles.add(file);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Java递归和非递归遍历目录
最新推荐文章于 2024-06-25 19:45:14 发布