IO系统_用递归遍历目录

     从数据结构上面来看,目录是一种树状结构的,根目录是根结点,子目录是子结点,而文件则是叶,遍历目录即遍历树的所有结点和叶子了。对于树状结构的,比较好用的还是递归了。

  1、 递归一个目录的三步骤:
  ①每次传递一个目录参数过来,就打印出这个目录路径
  ②通过ListFiles方法获取其所以子File对象,
  ③遍历所有File对象:当File对象映射目录时,递归调用本方法
    否则,File对象就映射文件,打印文件路径

<span style="font-size:18px;">import java.io.*;

class FileDemo3 {
	public static void main(String[] args) {
		File f=new File("D:\\zsw");
		showDir(f);
	}
	public static void showDir(File dir) {
		System.out.println(dir);
		File[] files = dir.listFiles();
		for (File f : files) {
			if (f.isDirectory()) {
			    showDir(f);
			}
			else {
			    System.out.println(f);
			}
		}
	}

}</span>


结果是:
D:\zsw
D:\zsw\a.txt
D:\zsw\b
D:\zsw\a
D:\zsw\a\bDir
D:\zsw\a\bDir\新建文件夹
D:\zsw\a\m.txt
D:\zsw\c
D:\zsw\d.txt



2如果想在每一层子目录前面加上一些分隔符,让目录的层次结构更
加清晰,这需要如下的修改。比如打印成:
--zsw
  --a.txt
  --b
  --a
    --bDir
      --新建文件夹
    --m.txt
  --c
  --d.txt


import java.io.File;
public class FileDemo4 {
	public static void main(String[] args) {
        showDir2(new File("D:\\zsw"),0);
	}
	public static String levelStr(int level) {
		StringBuilder sb = new StringBuilder();
		for (int i = 0; i < level; i++) {
			sb.append("  ");
		}
		return sb.toString();
	}
	/*
	 * ①打印每一层目录时,在前面加上相应的空格和"--"
	 * ②在将目录层次level++
	 * ③根据目录层次获得前缀字符串
	 */
	public static void showDir2(File dir, int level) {
		System.out.println(levelStr(level) + "--" + 


dir.getName());
		level++;
		File[] files = dir.listFiles();
		for (File f : files) {
			if (f.isDirectory()) {
				showDir2(f, level);
			} else {
				System.out.println(levelStr(level) + "--" + f.getName());
			}
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值