A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© coqns 中级黑马   /  2012-12-10 11:00  /  1414 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 coqns 于 2012-12-10 18:32 编辑

上周论坛发布了第三期题目:指定一个目录,用递归的方法不断递进的扫描整个目录,如果不是文件夹是文件,则停止扫描,如果是文件夹,则一直往里扫描查询直到没有文件夹为止。我的代码如下,当时得了6分(满分是10分),最后自己又想了下,可能是自己没考虑到隐藏文件、异常什么的吧?在这里求满分代码,学习一下!
  1. import java.io.*;

  2. public class FileDemo
  3. {
  4.         public static void main(String[] args) throws IOException
  5.         {
  6.                 //指定要扫描的目录
  7.                 File dir=new File("d:\\myFile");
  8.                 //开始扫描
  9.                 StringBuilder result=new StringBuilder();
  10.                 result.append("目录列表:\r\n");
  11.                 //获取扫描结果
  12.                 String r=showDir(dir,0,result);
  13.                
  14.                 //创建txt文件并写入结果
  15.                 FileWriter writer=new FileWriter("d:\\log.txt");
  16.                 writer.write(r);
  17.                 //刷新并关闭流
  18.                 writer.close();
  19.         }
  20.         
  21.         //扫描目录并返回字符串结果
  22.         public static String showDir(File dir,int level,StringBuilder result )
  23.         {
  24.                 //字符串增加:(目录层级+目录名字)
  25.                 result.append(getLevel(level)+dir.getName()+"\r\n");
  26.                 level++;
  27.                
  28.                 //文件列表
  29.                 File[] files=dir.listFiles();
  30.                 for (int i = 0; i < files.length; i++)
  31.                 {
  32.                         //如果为目录则递归调用showDir()
  33.                         if (files[i].isDirectory())
  34.                                 showDir(files[i],level,result);
  35.                         //如果不是目录则字符串增加:(目录层级+文件路径)
  36.                         else
  37.                                 result.append(getLevel(level)+files[i]+"\r\n");
  38.                 }
  39.                
  40.                 return result.toString();
  41.         }
  42.         
  43.         //所在目录层级返回相应空格
  44.         public static String getLevel(int level)
  45.         {
  46.                 StringBuilder sb=new StringBuilder();
  47.                 sb.append("|--");
  48.                 for (int i = 0; i < level; i++)
  49.                         sb.insert(0,"  ");
  50.                 return sb.toString();
  51.         }
  52. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

3 个回复

倒序浏览
顶一下。。
回复 使用道具 举报
题目好像还要求打印到一个txt文档里吧,有IO的东西,LZ这里貌似只有递归
回复 使用道具 举报
刘子义 发表于 2012-12-10 13:26
题目好像还要求打印到一个txt文档里吧,有IO的东西,LZ这里貌似只有递归

晕,发错代码了,我重发了一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马