遍历获取文件夹下的所有文件

遍历获取文件夹下的所有文件

递归思路:(核心:判断当前路径是文件夹,则递归方法)

判断参数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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值