2013-04-07 48 views
0

我目前被困在將目錄讀入ArrayList或更好的Java數組中。 我想在JTree中使用數據。在Java中遞歸地讀取目錄到ArrayList/Array

這是我的代碼目前使用:

//After the definiton of the Class 
private ArrayList<File> files = new ArrayList<File>(); 

// In the main method 
this.parse(new File(".")); 
DefaultMutableTreeNode root = processHierarchy(files.toArray()); 
this.tree = new JTree(root); 

private void parse(File parent) 
{ 
files.add(parent); 
    if(parent.isDirectory()) 
    { 
     System.out.println("DIR: "+parent.getName()); 

     String[] child = parent.list(); 

     if(child != null) 
     { 
      for(int i = 0; i < child.length; i++) 
      { 
       File f = new File(parent, child[i]); 

       this.parse(f); 
      } 
     } 
    } 
    else 
    { 
     System.out.println("FILE: "+parent.getName()); 
    } 
} 

任何人有一個想法?

+0

我們應該猜到的? – 2013-04-07 17:47:03

+0

它正在以這種方式工作,但它顯示了同一級別上的所有內容,而不是樹木 – user1818486 2013-04-07 17:51:34

+0

您想做什麼?如果yiu想將目錄內容讀入列表中,那麼你需要遞歸的是什麼,如果你想創建一個層次結構,一個單獨的列表將不夠用。 – skuntsel 2013-04-07 17:54:00

回答

0

我發現這個代碼聯機搜索一個路徑,然後顯示它在JTree

import javax.swing.*; 
import javax.swing.tree.*; 
import java.awt.event.*; 
import java.awt.*; 
import java.util.*; 
import java.io.*; 

public class SimpleTree extends JPanel { 

JTree tree; 
    DefaultMutableTreeNode root; 
    public SimpleTree() { 
    root = new DefaultMutableTreeNode("root", true); 
    getList(root, new File("C:\\Program Files")); // change path here 
    setLayout(new BorderLayout()); 
    tree = new JTree(root); 
    tree.setRootVisible(false); 
    add(new JScrollPane((JTree)tree),"Center"); 
    } 

    public Dimension getPreferredSize(){ 
    return new Dimension(200, 120); 
    } 

    public void getList(DefaultMutableTreeNode node, File f) { 
    if(!f.isDirectory()) { 
     // We keep only JAVA source file for display in this HowTo 
     if (f.getName().endsWith("java")) { 
      System.out.println("FILE - " + f.getName()); 
      DefaultMutableTreeNode child = new DefaultMutableTreeNode(f); 
      node.add(child); 
      } 
     } 
    else { 
     System.out.println("DIRECTORY - " + f.getName()); 
     DefaultMutableTreeNode child = new DefaultMutableTreeNode(f); 
     node.add(child); 
     File fList[] = f.listFiles(); 
     for(int i = 0; i < fList.length; i++) 
      getList(child, fList[i]); 
     } 
    } 

    public static void main(String s[]){ 
    MyJFrame frame = new MyJFrame("Directory explorer"); 
    } 
    } 

class WindowCloser extends WindowAdapter { 
    public void windowClosing(WindowEvent e) { 
    Window win = e.getWindow(); 
    win.setVisible(false); 
    System.exit(0); 
    } 
    } 

class MyJFrame extends JFrame { 
    JButton b1, b2, b3; 
    SimpleTree panel; 
    MyJFrame(String s) { 
    super(s); 
    panel = new SimpleTree(); 
    getContentPane().add(panel,"Center"); 
    setSize(300,300); 
    setVisible(true); 
    setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); 
    addWindowListener(new WindowCloser()); 
    } 

} 

來源:http://www.rgagnon.com/javadetails/java-0324.html

+0

謝謝,這工作! – user1818486 2013-04-07 18:40:15