递归查找文件夹与所有文件-java基础

《Thinking in java》中例子的简化版

package java1.myFile;

import java.io.File;
import java.io.FilenameFilter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Pattern;

/**
 * Created by asus on 2017/9/6.
 */
public final class myDirectory {

    public static class TreeInfo implements Iterable<File> {
        public List<File> files = new ArrayList<>();
        public List<File> dirs = new ArrayList<>();

        @Override
        public String toString() {
        //PPrint.pformat:格式化输出
            return "TreeInfo{" +
                    "files=" + PPrint.pformat(files) +
                    ", dirs=" +  PPrint.pformat(dirs) +
                    '}';
        }

        @Override
        public Iterator<File> iterator() {
            return files.iterator();
        }

        void addAll(TreeInfo other) {
            files.addAll(other.files);
            dirs.addAll(other.dirs);
        }

        //可自定义多种重载方法,使regex有意义
        public static TreeInfo walk(String start) {
            return recurseDirs(new File(start), ".*");
        }

        static TreeInfo recurseDirs(File startDir, String regex) {
            TreeInfo info = new TreeInfo();
            for (File item : startDir.listFiles()) {
                if (item.isDirectory()) {
                    info.dirs.add(item);
                    info.addAll(recurseDirs(item, regex));
                } else {
                    //可添加regex匹配
                    info.files.add(item);
                }
            }
            return info;
        }

        public static void main(String[] args) {
            System.out.println(walk("."));
        }

    }

}

格式化输出

package java1.myFile;

import java.util.Collection;

/**
 * Created by asus on 2017/9/6.
 */
public class PPrint {
    public static String pformat(Collection<?> c){
        StringBuilder sb=new StringBuilder("[");
        for(Object item:c){
            if(c.size()>1){
                sb.append("\n  ");
            }
            sb.append(item);
        }
        if(c.size()>1){
            sb.append("\n  ");
        }
        sb.append("]");
        return sb.toString();
    }
}
/** * 根据等级查询类目树 * * @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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值