本帖最后由 coqns 于 2012-12-10 18:32 编辑
上周论坛发布了第三期题目:指定一个目录,用递归的方法不断递进的扫描整个目录,如果不是文件夹是文件,则停止扫描,如果是文件夹,则一直往里扫描查询直到没有文件夹为止。我的代码如下,当时得了6分(满分是10分),最后自己又想了下,可能是自己没考虑到隐藏文件、异常什么的吧?在这里求满分代码,学习一下!- import java.io.*;
- public class FileDemo
- {
- public static void main(String[] args) throws IOException
- {
- //指定要扫描的目录
- File dir=new File("d:\\myFile");
- //开始扫描
- StringBuilder result=new StringBuilder();
- result.append("目录列表:\r\n");
- //获取扫描结果
- String r=showDir(dir,0,result);
-
- //创建txt文件并写入结果
- FileWriter writer=new FileWriter("d:\\log.txt");
- writer.write(r);
- //刷新并关闭流
- writer.close();
- }
-
- //扫描目录并返回字符串结果
- public static String showDir(File dir,int level,StringBuilder result )
- {
- //字符串增加:(目录层级+目录名字)
- result.append(getLevel(level)+dir.getName()+"\r\n");
- level++;
-
- //文件列表
- File[] files=dir.listFiles();
- for (int i = 0; i < files.length; i++)
- {
- //如果为目录则递归调用showDir()
- if (files[i].isDirectory())
- showDir(files[i],level,result);
- //如果不是目录则字符串增加:(目录层级+文件路径)
- else
- result.append(getLevel(level)+files[i]+"\r\n");
- }
-
- return result.toString();
- }
-
- //所在目录层级返回相应空格
- public static String getLevel(int level)
- {
- StringBuilder sb=new StringBuilder();
- sb.append("|--");
- for (int i = 0; i < level; i++)
- sb.insert(0," ");
- return sb.toString();
- }
- }
复制代码 |