下面是JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用)的攻略:
1.递归调用遍历文件夹下的所有文件
递归调用是指一个方法调用自身的过程,可以实现对多层嵌套的文件夹进行遍历。下面是一段JAVA代码可以实现递归调用遍历文件夹下的所有文件:
import java.io.File;
public class Test {
public static void main(String[] args) {
File root = new File("D:\\test");
List<File> files = new ArrayList<File>();
getAllFiles(root, files);
for(File file : files) {
System.out.println(file.getAbsolutePath());
}
}
private static void getAllFiles(File dir, List<File> files) {
File[] listFiles = dir.listFiles();
if(listFiles != null) {
for(File file : listFiles) {
if(file.isDirectory()) {
getAllFiles(file, files);
} else {
files.add(file);
}
}
}
}
}
解释:
File root = new File("D:\\test");
创建需要遍历的文件夹,这里是"D:\test"。List<File> files = new ArrayList<File>();
创建一个保存文件的List。getAllFiles(root, files);
使用getAllFiles方法来获取文件夹下的所有文件。private static void getAllFiles(File dir, List<File> files)
方法中,如果当前文件是一个文件夹,就继续遍历其内部,如果不是,则添加到文件List中。
示例:
遍历文件夹"test"下的所有文件。
2.非递归调用遍历文件夹下的所有文件
非递归调用是指在方法内部使用循环完成对每层文件夹的遍历,相对于递归调用更加节省内存。下面是一段JAVA代码可以实现非递归调用遍历文件夹下的所有文件:
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Stack;
public class Test1 {
public static void main(String[] args) {
File root = new File("D:\\test");
List<File> fileList = new ArrayList<File>();
Stack<File> dirStack = new Stack<File>();
dirStack.push(root);//把顶级目录压入栈
while(!dirStack.isEmpty()){
File file = dirStack.pop();
if(file.isDirectory()){
File[] listFiles = file.listFiles();
if(listFiles != null){
for(File tempFile : listFiles){
if(tempFile.isDirectory()){
dirStack.push(tempFile); //把下层目录压入栈
}else{
fileList.add(tempFile);
}
}
}
}else{
fileList.add(file);
}
}
for(File file : fileList){
System.out.println(file.getAbsolutePath());
}
}
}
解释:
File root = new File("D:\\test");
一样是创建需要遍历的文件夹,这里是"D:\test"。- 创建一个空List存储所有文件,创建一个Stack保存需要遍历的文件夹。
dirStack.push(root);
把顶级目录压入栈中。while(!dirStack.isEmpty()){....}
如果栈不为空则执行循环。File file = dirStack.pop();
取出最后一个需要遍历的文件夹。- 如果是一个文件夹,则获取其全部的文件或目录,并入栈。
- 如果是一个文件,则加入到文件List中。
示例:
遍历文件夹"test"下的所有文件。
希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JAVA实现遍历文件夹下的所有文件(递归调用和非递归调用) - Python技术站