递归遍历文件夹获取所有文件的绝对路径

import java.io.File;
import java.util.HashSet;
import java.util.Set;
/**
 * 递归获取所有文件并打印以".txt"格式结尾的文件绝对路径
 * @author Lyle
 * @date 2020/8/26
 */
public class FileRecursion {
    //使用全局变量保存所有文件路径
    static Set<String> filePaths=new HashSet<>();
    public static void main(String[] args) {
        File file=new File("E:\\diguiTest");
        Set<String> filePath = getFilePath(file);
        if (filePath.size()>0){
            for (String fileStr : filePath) {
                if (fileStr.contains(".txt")){
                    System.out.println(fileStr);
                }
            }
        }
    }
    public static Set<String> getFilePath(File file){
        File[] files = file.listFiles();
        if (files==null||files.length==0){
            return new HashSet<>();
        }
        for (File file1 : files) {
            if (file1.isDirectory()){
                //递归调用
                getFilePath(file1);
            }else {
                //保存文件路径到集合中
                filePaths.add(file1.getAbsolutePath());
            }
        }
        return filePaths;
    }
}

 以上的做法,可以实现功能,但是使用了全局变量,一般的做法中避免使用全局变量,因此可以将全局变量作为参数传进递归调用的方法中,优化后的代码如下:

import java.io.File;
import java.util.HashSet;
import java.util.Set;
/**
 * 递归获取所有文件并打印以".txt"格式结尾的文件绝对路径
 * @author Lyle
 * @date 2020/8/26
 */
public class FileRecursion {
    public static void main(String[] args) {
        Set<String> filePaths=new HashSet<>();
        File file=new File("E:\\diguiTest");
        Set<String> filePath = getFilePath(file,filePaths);
        if (filePath.size()>0){
            for (String fileStr : filePath) {
                if (fileStr.contains(".txt")){
                    System.out.println(fileStr);
                }
            }
        }
    }
    public static Set<String> getFilePath(File file, Set<String> filePaths){
        File[] files = file.listFiles();
        if (files==null||files.length==0){
            return new HashSet<>();
        }
        for (File file1 : files) {
            if (file1.isDirectory()){
                //递归调用
                getFilePath(file1, filePaths);
            }else {
                //保存文件路径到集合中
                filePaths.add(file1.getAbsolutePath());
            }
        }
        return filePaths;
    }
}

 

posted @ 2020-08-26 09:51  moonlighter  阅读(962)  评论(0编辑  收藏  举报