CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

求一个遍历目录树的算法

楼主redlaputa(吾心如秋思,爱随雨后归)2005-04-03 13:10:31 在 Java / J2SE / 基础类 提问

想遍历一个文件夹和其内的所有的子文件夹的多叉树  
   
  //目录树的类的结构为  
  public   class   Catalog   {  
      String   CatalogName;  
      boolean   hasFile;  
      Catalog[]   catalogs;  
  }  
   
  求算法  
   
  问题点数:0、回复次数:9Top

1 楼pdw2009(不想做菜鸟)回复于 2005-04-03 23:05:03 得分 0

好贴..顶Top

2 楼simonxuluo(爱江山更爱美人)回复于 2005-04-03 23:08:59 得分 0

我只会用递归Top

3 楼simonxuluo(爱江山更爱美人)回复于 2005-04-03 23:26:45 得分 0

public   class   Catalog   {  
  static   int   count   =   0;  
      String   catalogName;  
      boolean   hasFile;  
      Catalog[]   catalogs;  
      public   Catalog(String   name)   {  
      catalogName   =   name;  
      }  
      public   void   recurse(Catalog   catalog)   {  
      if(count   >=   10000   ||   catalog   ==   null)   return;  
      System.out.println("#"   +   (++count)   +   "   "   +   catalog.catalogName);  
      if(catalog.catalogs   !=   null)   {  
      for(int   i   =   0;   i   <   catalogs.length;   i++)   {  
      recurse(catalog.catalogs[i]);  
      }  
      }  
      }  
       
      public   static   void   main(String[]   args)   {  
      Catalog[]   c1   =   new   Catalog[10];  
      Catalog[]   c2;  
      for(int   i   =   0;   i     <   10;   i++)   {  
      c1[i]   =   new   Catalog("\t"   +   i);  
      c2   =   new   Catalog[10];  
      for(int   j   =   0;   j   <   10;   j++)   {  
      c2[j]   =   new   Catalog("\t\t"   +   i   +   "-"   +   j);    
      }  
      c1[i].catalogs   =   c2;  
      }  
      Catalog   c   =   new   Catalog("&cedil;ù");  
      c.catalogs   =   c1;  
      c.recurse(c);  
      }  
       
  }Top

4 楼slh002(呵呵)回复于 2005-04-04 00:05:25 得分 0

好Top

5 楼jnzsk()回复于 2005-04-04 07:41:19 得分 0

学习Top

6 楼javaJeff(华子)回复于 2005-04-14 15:52:41 得分 0

递归和非递归  
  import   java.util.*;  
   
  public   class   Directory   {  
  public   class   Catalog   {  
  String   name;  
  boolean   hasFile;  
  Catalog   []   catalogs;  
  }  
   
  public   class   CatalogStack   {  
  ArrayList   data   =   new   ArrayList();  
   
  public   void   push(Catalog   cat)   {  
   
  data.add(cat);  
   
  }  
   
  public   Catalog   pop()   {  
  Catalog   cat;  
  int   index   =   0;  
  cat   =   (Catalog)data.get(index);  
  data.remove(index);  
   
   
  return   cat;  
  }  
   
  public   int   size()   {  
   
  return   data.size();  
  }  
  }  
   
  Catalog   root;  
  int   printLevel   =   0;  
   
   
  void   initialize(){  
   
  if   (root   !=   null)   {  
  return;  
  }  
   
  root   =   new   Catalog();  
  root.name   =   "root";  
  root.hasFile   =   true;  
  root.catalogs   =   new   Catalog[3];  
  for   (int   i   =   0;   i   <   root.catalogs.length;   i   ++)   {  
   
  root.catalogs[i]   =   new   Catalog();  
  root.catalogs[i].name   =   "child"   +   i;  
   
  root.catalogs[i].catalogs   =   new   Catalog[2];  
   
  for   (int   j   =   0;   j   <   2;   j   ++)   {  
  root.catalogs[i].catalogs[j]   =   new   Catalog();  
  root.catalogs[i].catalogs[j].name   =   "grandson"   +   i   +   "-"   +   j;  
  }  
  }  
   
  }  
   
   
  public   void   printAllFolders()  
  {  
  //printNode(root);  
  printNodeWithoutRecurve();  
  }  
   
  private   void   printNodeWithoutRecurve(){  
   
  CatalogStack   stack   =   new   CatalogStack();  
  if   (root   ==   null)   {   return   ;}  
   
  stack.push(root);  
   
  //System.out.println(root.name);  
  while   (stack.size()   !=   0)   {  
  Catalog   cat   =   stack.pop();  
   
  if   (cat   ==   null)   {continue;}  
   
  System.out.println(cat.name);  
  for   (int   i   =   0;   (cat.catalogs   !=   null)&&(i   <   cat.catalogs.length);   i   ++)   {  
  if   (cat.catalogs[i]   ==   null)   {   continue;   }  
  stack.push(cat.catalogs[i]);  
  }  
  }  
  }  
   
  private   void   printNode(Catalog   node)   {  
  if   (node   ==   null)   {  
  return   ;  
  }  
  for   (int   i   =   0;   i   <   printLevel;   i   ++)   {  
  System.out.print("   ");  
   
  }  
  System.out.println(node.name   +   ((node.hasFile   ?   "Y"   :   "N")));  
   
  for   (int   subCatalogIndex   =   0;    
  (node.catalogs   !=   null)   &&   (subCatalogIndex   <   node.catalogs.length)   ;    
  subCatalogIndex   ++)   {  
   
  if   (node.catalogs[subCatalogIndex]   ==   null)   {  
  continue;  
  }  
   
  printLevel   ++;  
  printNode(node.catalogs[subCatalogIndex]);  
  }  
   
  printLevel   --;  
  }  
   
  public   static   void   main(String[]   args){  
   
  Directory   dir   =   new   Directory();  
  dir.initialize();  
  dir.printAllFolders();  
  }  
  }  
  Top

7 楼shan1119(大天使,卐~解!)回复于 2005-04-14 17:08:51 得分 0

package   FileIO;  
   
  import   java.io.*;  
  class   Tester{  
    public   void   seekFiles(String   strName,   Catalog   catalog,   String   tab1)   {  
    int   j=0;  
    try{  
          File   outFile   =   new   File(strName);  
          catalog   =   new   Catalog();  
          catalog.CatalogName   =   outFile.getName();  
          if   (outFile.isDirectory())   {  
          catalog.hasFile   =   true;  
              String[]   fileNames   =   outFile.list();  
          catalog.catalogs   =   new   Catalog[fileNames.length];  
              for   (int   i   =   0;   i   <   fileNames.length;   i++)   {  
              this.seekFiles(outFile.getPath()   +   "\\"   +   fileNames[i],catalog.catalogs[i],tab1+"\t");  
              }  
          }  
          else   if   (outFile.isFile())   {  
          catalog.hasFile   =   false;  
          }  
          else   {  
              System.out.println("File   Not   Found");  
          }  
    }catch(Exception   e){  
    System.out.println(e);  
    }  
  }  
  public   static   void   main(String   args[])  
  {  
      Tester   t=new   Tester();  
      Catalog   catalog   =   new   Catalog();  
      t.seekFiles("d:\\oracle",catalog,"\t");  
  }  
  }  
  class   Catalog   {  
      String   CatalogName;  
      boolean   hasFile;  
      Catalog[]   catalogs;  
       
  }Top

8 楼opencsdn(虚心求教)回复于 2005-04-14 18:12:06 得分 0

class   Catalog   {  
      String   CatalogName;  
      boolean   hasFile;  
      Catalog[]   catalogs;  
  }  
   
  public   class   DirectorySearch  
  {  
   
  public     static   void   search(Catalog   catalog)  
  {  
  if(!catalog.hasFile)//this   is   not   a   directory  
  return   ;  
  try  
  {  
  System.out.println(catalog.CatalogName);  
  for(int   i=0;i<catalog.catalogs.length;i++)  
  {  
  Catalog   c=catalog.catalogs[i];  
  if(c.hasFile)  
  System.out.println(c.CatalogName);  
  search(c);  
   
  }  
  }  
  catch(Exception   e)  
  {  
   
  e.printStackTrace();  
  }  
   
  }  
  public   static   void   main(String[]   args)  
  {  
  Catalog   catalog=new   Catalog();  
  //自己初始化这个catalog  
  search(catalog);  
   
  }  
  }Top

9 楼thrive_li()回复于 2005-04-14 18:53:11 得分 0

upTop

相关问题

  • 目录树填充算法问题
  • 如何遍历整个目录树查找文件
  • 求教window的文件目录树的算法
  • 请教一个类似目录树的算法,解决问题马上结帖
  • 谁能写实现目录树遍历,要求比windows自带的查找器要快
  • 求一遍历算法
  • 求一遍历算法!
  • 目录树
  • 哪位朋友能给个删除整个目录树的C源码?最好是用递归算法。
  • 请问遍历,一个目录树或目录下的文件,并获得文件名,该用哪个函数,谢谢!

关键词

  • 算法
  • 文件夹
  • null
  • 目录树
  • 遍历
  • catalogs
  • catalogname
  • boolean hasfile
  • count

得分解答快速导航

  • 帖主:redlaputa

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo