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);
  }
  
}

解决方案 »

  1.   

    递归和非递归
    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();
    }
    }
      

  2.   

    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;
      
    }
      

  3.   

    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);

    }
    }