递归遍历子目录

用到的方法

方法名方法作用
isFile()判断对象是不是文件
getName()获取文件名
listFiles()获取文件子目录File集合

今天正在学习IO流,首先利用File文件的listFiles()方法获取File数组,然后foreach遍历打印;
代码如下:

		String pathname = "e:" + File.separator + "a";
		File file = new File(pathname);
		File[] fileArr = file.listFiles();
		for (File file2 : fileArr) {
			System.out.println(file2);
		}

结果:
e:\a\b.txt
e:\a\新建文件夹
e:\a\新建文件夹 (2)

我们发现用foreach只能打印一级目录,那如何打印子目录的子目录呢?那我们需要判断它是不是文件夹,那可是我们又不知道要写多少次,所以想到利用递归
代码:

package io;

import java.io.File;

public class Test5 {
	public static void main(String[] args) {

		File[] root = File.listRoots();

		String pathname = "e:" + File.separator + "a";
		File file = new File(pathname);

		bmli(file);

	}

	public static void bmli(File file) {
		File[] fileArr = file.listFiles();
		for (File file2 : fileArr) {
			System.out.println(file2.getName());
			if (!file2.isFile()) {
				bmli(file2);
			}
		}
	}
}

结果:
b.txt
新建文件夹
3
3.txt
新建文本文档.txt
新建文件夹 (2)

恩,利用递归就可以遍历了,不过不是一级目录连在一起,顺序有点乱。
回去想一想,想到了再写怎么遍历出有顺序的。

嗯,改了一点点就可以了

package io;

import java.io.File;

public class Test5 {
	public static void main(String[] args) {

		File[] root = File.listRoots();

		String pathname = "e:" + File.separator + "a";
		File file = new File(pathname);

		bmli(file);

	}

	public static void bmli(File file) {
		System.out.println("********************");
		File[] fileArr = file.listFiles();
		for (File file2 : fileArr) {
			System.out.println(file2.getName());

		}

		for (File file2 : fileArr) {

			if (!file2.isFile()) {
				bmli(file2);
			}
		}
	}
}

结果:


b.txt
新建文件夹
新建文件夹 (2)


3
新建文本文档.txt


3.txt


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值