递归查询文件目录下所有的文件(八)

忽然发现,游戏并没有那么好玩,真正好玩的是什么? 人心。 而如何避免别人玩弄你的心,那就是让别人不敢玩弄你的心,代价是付不起的。 人神之恋,开始了。
上一章简单介绍了两个字符串的最大公共子串(七),如果没有看过,请观看上一章

一 查询目录下所有的文件

有时候,需要根据一个目录来查询该目录下所有的文件信息。 主要是根据File 类来进行相应的处理。 这里讲其中的一种方式。

public static void showFileList(File file){
		if(!file.exists()){
			System.out.println("这是一个错误的路径");
		}
		if(file.isDirectory()){ //如果是目录的话,递归调用这个查询方法。
			File []files=file.listFiles();
			for (File file2 : files) {
				showFileList(file2);
			}
		}else{
			if(file.isFile()){ //如果是文件的话
				//System.out.println(file.getAbsolutePath());
				//System.out.println(file.getPath()+File.separator+file.getName());
				System.out.println(file); //这三种方式均可以。
			}
		}
	}

测试为:

File root=new File("D:"+File.separator+"a");
		showFileList(root); //0表示的是级别

查询结果为:
在这里插入图片描述

二. 集合传入传出

上面的这个方法,输出时竟然是System.out.println() 方式进行输出的,可以做简单的测试使用,但无法在代码中进行重用的,需要将所有的文件信息都存储起来。 可以存储在一个List 集合里面, 只存储文件名,所以用 String 类型即可。与第一种方式是一样的,只是将输出语句转换成add() 方法添加到集合里面。

public static void showFileList(File file,List<String> fileNameList){
		if(!file.exists()){
			System.out.println("这是一个错误的路径");
		}
		if(file.isDirectory()){
			File []files=file.listFiles();
			for (File file2 : files) {
				showFileList(file2);
			}
		}else{
			//System.out.println(file.getAbsolutePath());
			//System.out.println(file.getPath()+File.separator+file.getName());
			if(file.isFile()){
				fileNameList.add(file.getAbsolutePath());
			}
		}
	}

集合是从外面传递进来的,当然也可以在内部进行初始化,然后返回集合。

调用形式为:

		File root=new File("D:"+File.separator+"a");
		List<String> fileNameList=new ArrayList<String>();
		showFileList(root,fileNameList);
		for(String fileName:fileNameList){
			System.out.println(fileName);
		}

输出的结果,与上面一样。

三. 树型展示文件列表

上面只是展示最后一层的文件名,各个文件之间不容易一眼看出级别,如果能够树型 tree 展示就很好了。
在这里插入图片描述
如这样形式的简单展示。 其实,这个主要的思想就是在文件的名称前端添加空格,后面是正常的文件名,主要是对空格进行相应的处理。

public static void showFileList(File dir,int level){
		//级别进行++的处理。
		System.out.println(getLevelFormatter(level)+dir.getName());
		// 级别是局部参数
		level++;
		if(dir.isDirectory()){  //是目录的话
			//列出目录下的所有文件,也可以是目录。
			File[] file=dir.listFiles();
			for (File file2 : file) {
				showFileList(file2, level);
			}
		}
	}

//对文件名称进行处理的方式为

public static String getLevelFormatter(int level){
		StringBuilder sb=new StringBuilder("-|");
		while(level>0){
			// 四个空格,可以多个使用。
			sb.insert(0,"    ");
			level--;
		}
		return sb.toString();
	}

刚开始时,传入的级别是0. 测试方法为:

		File root=new File("D:"+File.separator+"a");
		showFileList(root,0); //0表示的是级别

结果与上面的一致。

谢谢!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

两个蝴蝶飞

你的鼓励,是老蝴蝶更努力写作的

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

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

打赏作者

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

抵扣说明:

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

余额充值