G
Guest
Gast
Hallo,
ich würde gerne das Filesystem in einem Jtree ausgeben lassen. Habe hierfür folgende rekursive Funktion geschrieben, die auch funktioniert, wenn man das Auflisten bei einem Ordner anfangen lässt, der nur wenige Unterordner hat.
Und hier ist auch das Problem: Starte ich beispielsweise bei / , dann kommt das Ding nie zu einem Ende.
Kann man das irgendwie optimieren?
mfg
Zum anzeigen, ne popelige GUI dazu:
Kurze Zusammenfassung: Wie kann das Ding optimiert werden?
Habe ich evtl. einen Denkfehler drin, der eine Endlosschleife verursacht?
mfg
lennart
ich würde gerne das Filesystem in einem Jtree ausgeben lassen. Habe hierfür folgende rekursive Funktion geschrieben, die auch funktioniert, wenn man das Auflisten bei einem Ordner anfangen lässt, der nur wenige Unterordner hat.
Und hier ist auch das Problem: Starte ich beispielsweise bei / , dann kommt das Ding nie zu einem Ende.
Kann man das irgendwie optimieren?
mfg
Code:
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.DefaultMutableTreeNode;
/**
* @author lennartkoster
*
*/
public class FolderTree extends JPanel {
private static final long serialVersionUID = 3978490439743163001L;
public FolderTree() {
// Neuer JTree
// Geht
JTree tree = new JTree(AddNodes(null, new File("/Volumes/Neue HDD/Users/lennartkoster/")));
// Geht nicht
// JTree tree = new JTree(AddNodes(null, new File("/")));
// JTree in Scrollpane legen
JScrollPane scrollpane = new JScrollPane(tree);
// Scrollpane hinzufügen
add(scrollpane);
}
// Rekursives hinzufügen von Foldern
private DefaultMutableTreeNode AddNodes(DefaultMutableTreeNode curParent,
File dir) {
String curPath = dir.getPath();
DefaultMutableTreeNode curDir = new DefaultMutableTreeNode(curPath);
if (curParent != null) {
curParent.add(curDir);
}
List<String> allElements = new ArrayList<String>();
String[] tmp = dir.list();
if (tmp != null && tmp.length > 0) {
for (String s : tmp) {
allElements.add(s);
}
}
java.util.Collections.sort(allElements);
File f;
for (String s : allElements) {
String element = s;
String elemPath = new String();
if (curPath.equals(".")) {
elemPath = s;
} else {
elemPath = curPath + File.separator + element;
}
f = new File(elemPath);
if (f.isDirectory()) {
//Rekursiver Aufruf
AddNodes(curDir, f);
}
}
return curDir;
}
}
Zum anzeigen, ne popelige GUI dazu:
Code:
import javax.swing.JFrame;
/**
* @author lennartkoster
*
*/
public class FileSystemGUI extends JFrame {
private static final long serialVersionUID = 6872264293765666266L;
FolderTree tree = new FolderTree();
public FileSystemGUI() {
ShowGUI();
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
new FileSystemGUI();
}
});
}
private void ShowGUI() {
add(tree);
pack();
setVisible(true);
}
}
Kurze Zusammenfassung: Wie kann das Ding optimiert werden?
Habe ich evtl. einen Denkfehler drin, der eine Endlosschleife verursacht?
mfg
lennart