Java之递归展示文件目录结构

通过递归函数,展示某个文件下目录结构

public class DirectorList {
	private static Scanner sc;

	public static void main(String[] args) {
		String route = getRoute();
		File file = new File(normRoute(route));
		System.out.println(file.getName());
		showFile(file, 1);
	}
	
	/*
	 * 利用递归遍历所有子目录,levels记录文件夹的层数(控制空格长度,模拟分层效果 )
	 */
	public static void showFile(File files,int levels){
		//获取所有的文件列表
		File[] arrFiles = files.listFiles();
		String str = "";
		//每向下延伸一层,文件前增加一层
		for (int i = 0; i < levels; i++) {
			str += "    ";
		}
		//增强for遍历文件数组
		for (File childFile : arrFiles) {
			System.out.println(str + childFile.getName());
			//如果file是目录,递归调用
			if(childFile.isDirectory())
				showFile(childFile, levels + 1);	
		}
	}
	
	//获取用户输入文件路径
	public static String getRoute(){
		sc = new Scanner(System.in);
		System.out.println("请输入文件的绝对路径:");
		String route = sc.next();
		return route;
	}
	
	//对用户输入的文件路径进行分割重新组装
	public static String normRoute(String str){
		//定义分割符\
		String strSplit = "\\\\";
		String normalSplit = "";
		String[] arrRoute = str.split(strSplit);
		for (String sonRoute : arrRoute) {
			normalSplit  = normalSplit + sonRoute + "\\\\";
		}
		return normalSplit;
	}
}

console:
请输入文件的绝对路径:
D:\foxmail\Global
Global
    7_1.ver
    Address
        3.0
            1
                AddrFolderTreeStg.hea
                AddrFolderTreeStg.htb
                AddrFolderTreeStg.rec0
                AddrNoteIdToEmails
                AddrNoteIdToMainEmailId
                Indexes
                    hitCount.ind
            AddressOption
        Images
            contact.png
    alarm
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 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
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值