java文件搜索(递归实现)

本文介绍了如何在Java中实现递归函数,用于在大型文件系统中查找特定文件,如File01.txt,通过遍历目录和子目录,提高文件管理效率。
摘要由CSDN通过智能技术生成

1.简介:

        有时候,在一个大型文件系统中查找特定文件可能会很困难,特别是当文件分布在多个目录和子目录中时。为了解决这个问题,我们可以编写一个递归函数来搜索文件。

        递归是一种解决问题的方法,其中函数在解决问题时会调用自身。简单来说,递归就是函数调用自己的过程。在递归中,问题被分解成更小的子问题,每个子问题都是原始问题的一个简化版本。这些子问题被解决后,它们的结果被组合起来解决原始问题。

2.实现:

        这里小编实在D盘搜索目标文件:File01.txt。

import java.io.File;

public class SearchFile {
    public static void main(String[] args) {
        searchFile(new File("D:/") , "File01.txt");
    }
    public static void searchFile(File dir, String fileName){
        boolean found =false;//如果没找到要给出回应
        if(dir != null && dir.isDirectory()){
            File[] files = dir.listFiles();//用数组遍历文件夹中的文件
            if(files != null && files.length > 0) {
                for (File file : files) {
                    if(file.isFile()){
                        if(file.getName().contains(fileName)){
                            System.out.println("找到了文件:" + file.getAbsolutePath());
                            found=true;
                        }
                    }else {
                        searchFile(file, fileName);//递归运算
                    }
                }
            }
        }else {
            System.out.println("当前搜索的位置不是文件夹!");
        }
        if (!found){
            System.out.println("没找到文件:"+fileName);
        }
    }
}

3.边界情况 

如果传入的目录为 null 或者不是一个目录,则输出"当前搜索的位置不是文件夹!"。

如果目录为空或者没有任何文件,则输出"没找到文件:"加上文件名。

如果指定的文件名在目录及其子目录中不存在,则输出"没找到文件:"加上文件名。

4.总结

        在这篇博客中,介绍了如何使用 Java 编写一个递归函数来搜索特定文件名的文件。这种方法可以帮助我们在复杂的文件系统中快速找到需要的文件,提高了文件管理的效率。

  • 12
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
/** * 根据等级查询类目树 * * @param level * @return */ @Override public List queryCategoryTree(Integer level) { //查询当前级别下类目 List list = categoryDAO.list(level); //组装好的类目树,返回前端 List categoryTree = new ArrayList(); //所有类目 List allDTOList = new ArrayList(); if (CollectionUtils.isEmpty(list)) { return categoryTree; } for (CategoryDO categoryDO : list) { allDTOList.add(new CategoryTreeDTO().convertDOToDTO(categoryDO)); } //当前等级类目 categoryTree = allDTOList.stream().filter(dto -> level.equals(dto.getLevel())).collect(Collectors.toList()); for (CategoryTreeDTO categoryTreeDTO : categoryTree) { //组装类目为树结构 assembleTree(categoryTreeDTO, allDTOList,Constants.CATEGORY_MAX_LEVEL - level); } return categoryTree; } /** * 组装树 * * @param categoryTreeDTO * @param allList * @param remainRecursionCount 剩余递归次数 * @return */ public CategoryTreeDTO assembleTree(CategoryTreeDTO categoryTreeDTO, List allList, int remainRecursionCount) { remainRecursionCount--; //最大递归次数不超过Constants.CATEGORY_MAX_LEVEL-level次,防止坏数据死循环 if(remainRecursionCount < 0){ return categoryTreeDTO; } String categoryCode = categoryTreeDTO.getCategoryCode(); Integer level = categoryTreeDTO.getLevel(); //到达最后等级树返回 if (Constants.CATEGORY_MAX_LEVEL == level) { return categoryTreeDTO; } //子类目 List child = allList.stream().filter(a -> categoryCode.equals(a.getParentCode())).collect(Collectors.toList()); if (null == child) { return categoryTreeDTO; } categoryTreeDTO.setChildren(child); //组装子类目 for (CategoryTreeDTO dto : child) { assembleTree(dto, allList,remainRecursionCount); } return categoryTreeDTO; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lzy_3366

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值