2013-07-12 144 views
0

我想創建一個文件系統的JTree,通過給出rootfolder的路徑, 但是起初我試圖通過遞歸創建和打印節點到葉節點。我不明白爲什麼它不打印1級後,也許它不是調用createTree()遞歸...有人可以告訴我如何使它工作嗎?(int i = 0 is對外宣稱法)樹java的遞歸創建

public void createTree(String rootPath) 
{ 
    rootNode=new DefaultMutableTreeNode(rootPath); 
    File file=new File(rootPath); 
    if(file.isDirectory()&&file.list()!=null) 
    { 
     System.out.printf("\nThis folder contains %d files/folders\n" , file.list().length); 
     for(String node:file.list()) 
     { 
      nodes[i]=new DefaultMutableTreeNode(node); 
      System.out.println(" - "+nodes[i]); 
      createTree(node); 
      i++; 
     } 
    } 
    else if(file.isFile()) 
    { 
     nodes[i]=new DefaultMutableTreeNode(rootPath); 
     i++; 
     return; 
    } 
    else 
     return; 
} 
+0

遞歸被調用,但是你把所有創建的子樹放在一起? –

回答

1

file.list()只返回所以你需要追加父路徑傳遞節點到下一個遞歸調用時,該目錄的相對名稱:

createTree(rootPath + File.seperator + node); 

根路徑您的程序運行從不改變,所以使用相對文件名(在目錄內)沒有根路徑的路徑將不起作用file = new File(<relative-file-name>)

+1

非常感謝....工作完美。我也想知道是否遞歸地構建樹是一種好方法? –

+0

爲此,我將需要查看更多代碼,例如聲明節點和rootNode的位置。請注意,您在每次遞歸調用時都會覆蓋rootNode,因此最終它將指向目錄層次結構中最後一個最深的文件 – giorashc