问题描述
记得是一个游戏公司面试,然后人力面试后是机试,其中一道题目就是让遍历出一个目录下面的所有子目录以及文件。并且按照一定的缩进打印出来,当时做了有一大会没有做出来。最后面试结果也可想而知。今天看《java核心技术 卷II 》 上来就是流与文件,这也让我想起了曾经的这个经历。
具体实现
有了上面的经历,所以自己就想来实现一个这个功能,在没有查阅资料的前提下经过一段时间的调试,调试出来了如下程序,经过测试是满足当时问题的需求的。代码如下:
import java.io.File;
import java.io.IOException;
/**
* <p>
* 概要信息:遍历指定目录下的所有目录和文件,并按照一个的缩进打印
* </p>
*
* <p>
* 版权: ©2016 版权所有
* </p>
*
* @author qi
* @version %I%, %G%
*/
public class Test {
//统计层级初始值
private static int level = 0;
/**
*
* <p>
* 行为描述:测试方法正确性
* </p>
* @param
*/
public static void main(String[] args) throws IOException {
File file1 = new File("E:\\IdeWorkSpace\\eclipse\\Algorithm");//目录请替换为自己对应的目录
System.out.println(file1.getCanonicalPath());
System.out.println(file1.exists());
printChildrenPath(file1, 0);
}
/**
*
* <p>
* 行为描述:
* </p>
* @param dir(源目录) defaultLevel(源目录所在层级)
*/
public static void printChildrenPath(File dir, int defaultLevel) {
//内部统计层级初始值,解决统一目录下的目录与文件缩进不一致问题
int innerLevel = 0;
level = defaultLevel;
if (dir.isDirectory()) {
level++;
innerLevel = level;
System.out.println("dir:" + dir.getName());
for (File child : dir.listFiles()) {
printSeparator(innerLevel);
printChildrenPath(child, innerLevel);
}
} else {
System.out.println("file:" + dir.getName());
}
}
/**
*
* <p>
* 行为描述:根据所在层级进行相应的缩进,本示例以每次缩进两个空格为准
* </p>
* @param level(所在层级)
*/
public static void printSeparator(int level) {
for (int i = 0; i < level; i++) {
System.out.print(" ");
}
}
}
运行结果如下:
指定文件根目录截图如下: