递归打印目录结构
2013-03-08 13:21
295 查看
今天需要给维护人员提供一个项目的目录结构。入过项目不大1-2百m的话手写还可以接受,如果项目目录结构很复杂,或者项目巨大,人为手写的话就太变态,于是写了一段代码,解决这个问题。
生成结果:我们执行完生成的期望目标
|_serlet名字
| |_help
| |_pages
| | |_文件夹1
| | | |_文件夹1.1
| | | |_。。。。
| |_resource
| | |_css
| | |_img
| | | |_browser
| | |_js
| |_scripts
| | |_jquery
| |_styles
| |_WEB-INF
| | |_src
| | | |_ATMP_zh_CN.properties
| | | |_ATTR_zh_CN.properties
| | | |_client
| | | |_com
| | | | |_test
| | | | |_。。。。。
| | |_applicationContext.xml
| | |_data.xml
| | |_。。。。配置文件
问题分析:
对于每一个目录下的文件夹都要进行一次访问,我们可以提取一个结构出来。这个项目都是这个结构的嵌套。
那么毫无疑问,我们选择递归调用来解决这个问题。
就上面的模型而言,循环外层文件夹,判断结果是否为文件夹,如果是,输出结果,在将里层文件夹做为外层文件夹循环以上方法。
不妨先将问题简单话,在数据文件夹名前只加文件夹所在层数: 例如 2 内层文件夹
代码:
运行以上代码我们发现异常:
1、某一文件夹下文件夹名称前的号码是一样的,只有当循环到下一层时号码才改变。
2、最外层文件夹序号是1,2,3.。。。
经过调试发现了问题的所在:
this.floder(dir[i],floor++); 实际上是this.floder(dir[i],floor); floor++;这个方式来执行的。
修改代码
正确显示 文件夹所在层数 问价夹名称后,没我们只需将层数转换成“| ”即可。而“| ”个数完全可以等于层数值。
于是有了一下代码
经过运行符合我们想要的目录结果。
现在有进一步发现,我们要的配置文件没有显示,怎么办?
只需加个else,当非文件时判断后缀名来确定是否输出即可。我做j2ee所以需要.xml和.properties.
PS:注意split()是需要填写正则表达式的,不然无法将后缀名与文件名分离。
好了经过以上处理我们所要做的就是找到项目的绝对路径,然后运行main函数执行以上代码就可以了。
最后谈点感悟:对于生成这种目录结构的功能我以前没做过,在手工和自动之间考虑了很久。其实做了之后才知道,看上去困难的东西往往做起来很容易。而看起来简单的东西,做起来不一定真的简单。如果手工组的话那么很可能花上一整天,用程序的话从设计到完成也不过1-2个小时。选对正确的方法事半功倍。
生成结果:我们执行完生成的期望目标
|_serlet名字
| |_help
| |_pages
| | |_文件夹1
| | | |_文件夹1.1
| | | |_。。。。
| |_resource
| | |_css
| | |_img
| | | |_browser
| | |_js
| |_scripts
| | |_jquery
| |_styles
| |_WEB-INF
| | |_src
| | | |_ATMP_zh_CN.properties
| | | |_ATTR_zh_CN.properties
| | | |_client
| | | |_com
| | | | |_test
| | | | |_。。。。。
| | |_applicationContext.xml
| | |_data.xml
| | |_。。。。配置文件
问题分析:
对于每一个目录下的文件夹都要进行一次访问,我们可以提取一个结构出来。这个项目都是这个结构的嵌套。
那么毫无疑问,我们选择递归调用来解决这个问题。
就上面的模型而言,循环外层文件夹,判断结果是否为文件夹,如果是,输出结果,在将里层文件夹做为外层文件夹循环以上方法。
不妨先将问题简单话,在数据文件夹名前只加文件夹所在层数: 例如 2 内层文件夹
代码:
private void floder(File file,int floor){ File[] dir = file.listFiles(); for(int i=0;i<dir.length;i++){ if(dir[i].isDirectory()){ String output = floor +"|_"+dir[i].getName(); System.out.println(output); this.floder(dir[i],floor++); } } }
运行以上代码我们发现异常:
1、某一文件夹下文件夹名称前的号码是一样的,只有当循环到下一层时号码才改变。
2、最外层文件夹序号是1,2,3.。。。
经过调试发现了问题的所在:
this.floder(dir[i],floor++); 实际上是this.floder(dir[i],floor); floor++;这个方式来执行的。
修改代码
正确显示 文件夹所在层数 问价夹名称后,没我们只需将层数转换成“| ”即可。而“| ”个数完全可以等于层数值。
于是有了一下代码
private void floder(File file,int floor){ File[] dir = file.listFiles(); for(int i=0;i<dir.length;i++){ if(dir[i].isDirectory()){ StringBuffer head = new StringBuffer(); for(int k=0;k<floor;k++){ head.append("| "); } String output = head +"|_"+dir[i].getName(); System.out.println(output); int infloor = floor+1; this.floder(dir[i],infloor); }
}
经过运行符合我们想要的目录结果。
现在有进一步发现,我们要的配置文件没有显示,怎么办?
只需加个else,当非文件时判断后缀名来确定是否输出即可。我做j2ee所以需要.xml和.properties.
private void floder(File file,int floor){ File[] dir = file.listFiles(); for(int i=0;i<dir.length;i++){ if(dir[i].isDirectory()){ StringBuffer head = new StringBuffer(); for(int k=0;k<floor;k++){ head.append("| "); } String output = head +"|_"+dir[i].getName(); System.out.println(output); int infloor = floor+1; this.floder(dir[i],infloor); }else{ String[] part = dir[i].getName().split("\\."); if(part.length==2&&("xml".equals(part[1])||"properties".equals(part[1]))){ StringBuffer head = new StringBuffer(); for(int k=0;k<floor;k++){ head.append("| "); } String output = head +"|_"+dir[i].getName(); System.out.println(output); } } }
PS:注意split()是需要填写正则表达式的,不然无法将后缀名与文件名分离。
好了经过以上处理我们所要做的就是找到项目的绝对路径,然后运行main函数执行以上代码就可以了。
最后谈点感悟:对于生成这种目录结构的功能我以前没做过,在手工和自动之间考虑了很久。其实做了之后才知道,看上去困难的东西往往做起来很容易。而看起来简单的东西,做起来不一定真的简单。如果手工组的话那么很可能花上一整天,用程序的话从设计到完成也不过1-2个小时。选对正确的方法事半功倍。
相关文章推荐
- 利用一个简单的递归实现打印目录的层次结构
- 递归:打印一个目录下的所有子目录(要求打印出目录结构)
- java分享第七天-03(递归打印文件目录的树状结构)
- java_递归遍历文件目录结构,打印所有的目录名和文件名
- 递归打印目录的树状结构
- 递归遍历本地目录,并以树的形式打印出来
- java File类的使用 通过递归打印文件目录
- Java文件目录树状结构:控制台打印某个文件夹下的文件目录树状结构
- 递归求二叉树的层数和递归打印二叉树的树形结构
- 《算法》第一章——打印文件目录结构
- 《Unix环境高级编程》:递归遍历目录层次结构,并按文件类型计数
- [转自MSDN]递归位于C:\驱动器和打印的每个目录的名称
- python打印出指定目录下的所有文件夹和文件名(递归实现)
- File::Find 递归搜索文件目录结构
- 递归的使用[2]_打印级联目录
- file类_打印树状目录结构
- python递归打印某个目录的内容
- java递归列出目录结构练习
- Hibernate辅助实现系统目录的树形结构的打印
- APUE 4-22 递归降序遍历目录层次结构,并按文件类型计数