遍历获取文件夹下的所有文件
递归思路:(核心:判断当前路径是文件夹,则递归方法)
判断参数path路径是否存在;
判断参数path路径是否是文件路径;
判断参数path是否是空文件夹;
遍历当前文件夹,如果是文件夹则递归方法,如果是文件夹,则将文件加入到结果集resultList。
非递归思路:(核心:判断当前路径是文件夹,则将当前路径加入到需要遍历的LinkedList队列)
判断参数path路径是否存在;
判断参数path路径是否是文件路径;
判断参数path是否是空文件夹;
遍历当前文件夹,如果是文件夹则将文件夹路径加入到LinkedList队列,否则是文件,将文件加入到结果集resultList。
递归方式
/**
* 遍历文件夹下的所有文件(递归方式)
* @param path 路径(支持文件夹路径,也支持文件路径。如果path是文件夹路径,则返回该文件夹下的所有文件路径;如果path是文件路径,则返回该文件路径)
* @param resultList 返回所有文件 list
*/
private static void traverFolder2(String path, List<String> resultList) {
File file = new File(path);
// 判断参数path,路径是否存在
if (! file.exists()) {
System.out.println(String.format("路径[%s]不存在。", path));
}
// 判断参数path,是否是文件(只在第一次调用该方法时有用,第二次递归进入该方法,肯定不是文件,而是文件夹)
if (file.isFile()) {
resultList.add(file.getAbsolutePath());
return;
}
// 判断参数apth, 是否是空文件夹
File[] files = file.listFiles();
if (files == null) {
System.out.println(String.format("路径[%s]是一个空文件夹。", path));
}
// 遍历,递归
for (File file1 : files) {
if (file1.isDirectory()) {
System.out.println(String.format("文件夹:%s", file1.getAbsolutePath()));
traverFolder2(file1.getAbsolutePath(), resultList);
} else {
System.out.println(String.format("文件:%s", file1.getAbsolutePath()));
resultList.add(file1.getAbsolutePath());
}
}
}
public static void main(String[] args) {
String path = "D:\\file\\awen";
// 遍历文件夹下的所有文件(递归方式)
List<String> resultList = new ArrayList<>();
traverFolder2(path, resultList);
System.out.println("文件数量: " + resultList.size() + " resultList: " + resultList);
}
非递归方式
/**
* 遍历文件夹下的所有文件(非递归方式)
* @param path 路径(支持文件夹路径,也支持文件路径。如果path是文件夹路径,则返回该文件夹下的所有文件路径;如果path是文件路径,则返回该文件路径)
* @return 返回所有文件 resultList
*/
private static List<String> traverFolder1(String path) {
// folderNum 文件夹数量 fileNum 文件数量
int folderNum = 0, fileNum = 0;
// 所有文件存入 resultList
List<String> resultList = new ArrayList<>();
// 将目录下的文件/文件夹放入list
LinkedList<File> list = new LinkedList<>();
File file = new File(path);
// 判断参数path,路径是否存在
if (! file.exists()) {
System.out.println(String.format("路径[%s]不存在。", path));
return resultList;
}
// 判断参数path,是否是文件
if (file.isFile()) {
resultList.add(file.getAbsolutePath());
fileNum++;
System.out.println("文件夹数量:" + folderNum + ",文件数量:" + fileNum);
return resultList;
}
// 判断参数path,是否是空文件夹
if (file.listFiles() == null) {
System.out.println(String.format("路径[%s]是一个空文件夹。", path));
return resultList;
}
// 如果该路径下有文件/文件夹,则加入队列list
list.addAll(Arrays.asList(file.listFiles()));
// 如果list不为空,遍历
while (!list.isEmpty()) {
File file1 = list.removeFirst();
if (file1.exists() && file1.isFile()) {
resultList.add(file1.getAbsolutePath());
System.out.println(String.format("文件:%s", file1.getAbsolutePath()));
fileNum++;
continue;
}
File[] files = file1.listFiles();
if (files == null) {
continue;
} else {
System.out.println(String.format("文件夹:%s", file1.getAbsolutePath()));
folderNum++;
}
for (File f : files) {
if (f.isDirectory()) {
System.out.println(String.format("文件夹:%s", f.getAbsolutePath()));
list.add(f);
folderNum++;
} else {
System.out.println(String.format("文件:%s", f.getAbsolutePath()));
resultList.add(f.getAbsolutePath());
fileNum++;
}
}
}
System.out.println("文件夹数量:" + folderNum + ",文件数量:" + fileNum);
System.out.println("resultList: " + resultList);
return resultList;
}
public static void main(String[] args) {
String path = "D:\\file\\awen";
// 遍历文件夹下的所有文件(非递归方式)
List<String> list = traverFolder1(path);
}