Filesystem in JTree anzeigen

Status
Nicht offen für weitere Antworten.
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


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
 
G

Guest

Gast
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("D:\\")));
      
                // 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);
      }

      
      File[] files = dir.listFiles();
      
      if(files != null){
          for(File z : files){
        	  if(z.isDirectory()){
        		  AddNodes(curDir, z);
        	  }
          }  
      } 
      return curDir;
   }
}
 
G

Gast

Gast
Danke schön.

Geht allerdings immernoch nicht.. ich vermute mal, dass das an OS X liegt.. evtl. die Syslinks.. mal schauen..
 
G

Gast

Gast
Noch kürzer:

Code:
private DefaultMutableTreeNode addNodes(DefaultMutableTreeNode curParent, 
        File dir) { 

     String curPath = dir.getPath(); 
     DefaultMutableTreeNode curDir = new DefaultMutableTreeNode(curPath); 

     if (curParent != null) { 
        curParent.add(curDir); 
     } 
     
     for (File f : dir.listFiles()) {
    	 if (f != null && f.isDirectory()) {
    		 addNodes(curDir, f);
    	 }
     }
     
     return curDir; 
  }

Aber danke für "listFiles()".
 

cheezburgla

Neues Mitglied
Falls es jemanden interessieren sollte, oder jemand anders per Suche mal auf diesen Thread stoßen sollte:

Hab das Ganze jetzt nicht mehr rekursiv gelöst, sondern füge einer Node nur dann die Unter-ordner hinzu wenn man drauf klickt.

Spart einiges an Zeit, da man ja eh nie das gesamte FS aufeinmal anschauen kann.

Code:
/**
 * @Name newFolderTree.java
 * @Date 23.01.2009
 * @Author lennartkoster
 */
package de.cheez.components;

import java.io.File;

import javax.swing.GroupLayout;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.event.TreeSelectionEvent;
import javax.swing.event.TreeSelectionListener;
import javax.swing.tree.DefaultMutableTreeNode;

/**
 * @author lennartkoster
 * 
 */
public class NewFolderTree extends JPanel {

	private static final long serialVersionUID = -3635401151527581532L;
	private final JTree tree;
	private final JScrollPane scrollPane;
	
	public NewFolderTree() {
		DefaultMutableTreeNode node = new DefaultMutableTreeNode("/");
		addSubDirs(node);

		tree = new JTree(node);

		tree.addTreeSelectionListener(new TreeSelectionListener() {
			@Override
			public void valueChanged(TreeSelectionEvent arg0) {
				DefaultMutableTreeNode selNode = (DefaultMutableTreeNode) arg0
				      .getPath().getLastPathComponent();
				addSubDirs(selNode);
				if (!tree.isExpanded(arg0.getPath()))
					tree.expandPath(arg0.getPath());
			}
		});
		
		scrollPane = new JScrollPane(tree);
		
		GroupLayout layout = new GroupLayout(this);
		setLayout(layout);

		layout.setAutoCreateContainerGaps(true);
		layout.setAutoCreateGaps(true);

		layout.setVerticalGroup(layout.createSequentialGroup()
					.addComponent(scrollPane)
		);
		layout.setHorizontalGroup(layout.createSequentialGroup()
					.addComponent(scrollPane)
		);

	}

	private void addSubDirs(DefaultMutableTreeNode addToThisNode) {

		String curDir = new String(addToThisNode.toString());
		File file = new File(curDir);

		// Overriding isLeaf() to always return false
		class FolderNode extends DefaultMutableTreeNode {
			private static final long serialVersionUID = 1L;

			public FolderNode(String s) {
				super(s);
			}

			@Override
			public boolean isLeaf() {
				return false;
			}
		}

		for (File f : file.listFiles()) {
			if (f != null && !f.getPath().equalsIgnoreCase(curDir)
			      && f.isDirectory() == true) {
				addToThisNode.add(new FolderNode(f.getPath()));
			}
		}

	}

}

Falls jemand kosntruktive Kritik zu dem Ganzen hat, gerne her damit!
Bevors böse wird, aber bedenken, dass ich mit Java vor knapp 6 Wochen angefangen habe und das auch nur nebenher ;)

Deswegen: Gerne her mit konstruktiver Kritik!

lg
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
M Filesystem Java Basics - Anfänger-Themen 3
A POI Einlesen Excel Workbook aus BLOB oder von URL anstatt aus Filesystem ? Java Basics - Anfänger-Themen 3
F FileSystem in Baum darstellen/wurzel festlegen Java Basics - Anfänger-Themen 3
N Instanzen von beliebigen Klassen aus dem Filesystem erzeugen Java Basics - Anfänger-Themen 7
G Datei im Filesystem löschen Java Basics - Anfänger-Themen 8
H Filesystem begrenzen Java Basics - Anfänger-Themen 6
G JTree speichern und wieder einlesen Java Basics - Anfänger-Themen 5
C Unbekannte Methode add bei Klasse die JTree erweitert Java Basics - Anfänger-Themen 14
J ActionListener von JCheckBox im Knoten von JTree funktioniert nicht Java Basics - Anfänger-Themen 2
F Jtree kürzt Namen auf ... Java Basics - Anfänger-Themen 4
H Collections JTree remove zeigt keinen Effekt! Java Basics - Anfänger-Themen 8
H Best Practice Wo wird der rootNode eines JTree gespeichert... Java Basics - Anfänger-Themen 0
H Erste Schritte JTree: Instanzen einer Klasse speichern oder Namen/Strings... Java Basics - Anfänger-Themen 4
R JTree bewegen Java Basics - Anfänger-Themen 6
I JTree, Root-Name ändern Java Basics - Anfänger-Themen 4
N Dynamisch JTree erstellen Java Basics - Anfänger-Themen 3
G bestimmte dateiendungen in jtree rausfiltern Java Basics - Anfänger-Themen 7
P JTree aus txt Java Basics - Anfänger-Themen 8
M Warum wird mein Icon bei den JTree Nodes nicht angezeigt? Java Basics - Anfänger-Themen 7
JStickman JTree, JScrollPane, Liste mit graphischer Suchleiste - Dateimanager Java Basics - Anfänger-Themen 10
M JTree + JTab Java Basics - Anfänger-Themen 3
T JTree füllen Java Basics - Anfänger-Themen 3
B JTree knoten wird nicht übernommen Java Basics - Anfänger-Themen 4
S JTree Hilfe Java Basics - Anfänger-Themen 6
P Jtree MouseListener und NoCollapse Java Basics - Anfänger-Themen 2
M JTree ohne root anzeigen Java Basics - Anfänger-Themen 5
F JTree mit JSpinner Java Basics - Anfänger-Themen 2
I Liste von Dateien anzeigen/JTree Java Basics - Anfänger-Themen 4
G Zugriff auf JTree-Objekt Java Basics - Anfänger-Themen 2
K Problem: JTree mit integrierten JCheckboxen Java Basics - Anfänger-Themen 5
B OOP Jtree aus TreeMap<String, String[]> erstellen? Java Basics - Anfänger-Themen 6
D JTree ich dreh durch :D Java Basics - Anfänger-Themen 2
T JTree root setzten Java Basics - Anfänger-Themen 13
G xml Datei in JTree Java Basics - Anfänger-Themen 2
S JTree, Problem mit View Update Java Basics - Anfänger-Themen 2
R Problem mit JTree und JTable Java Basics - Anfänger-Themen 16
A JTree drucken Java Basics - Anfänger-Themen 2
M JTree und ein Button mit ActionListener Java Basics - Anfänger-Themen 3
G Verständnisproblem --> JTree Java Basics - Anfänger-Themen 6
A Jtree Aufbau Java Basics - Anfänger-Themen 5
G JTree ilstener Java Basics - Anfänger-Themen 3
G JTree Java Basics - Anfänger-Themen 2
G Erstellten JTree aus einer XML-Datei akktualisieren Java Basics - Anfänger-Themen 11
S jTree initialisierung Java Basics - Anfänger-Themen 4
F Doppelklick-Event auf JTree Java Basics - Anfänger-Themen 5
J ArrayListen mit Name und Vater an JTree übergeben Java Basics - Anfänger-Themen 3
G aussehen vom jtree wiederherstellen Java Basics - Anfänger-Themen 3
P JTree mit mehreren Wurzeln Java Basics - Anfänger-Themen 2
G Umbenennen im JTree Java Basics - Anfänger-Themen 5
G rechter Mausklick im JTree Java Basics - Anfänger-Themen 2
G Bilder im jTree Java Basics - Anfänger-Themen 3
G jTree Pfad merken Java Basics - Anfänger-Themen 2
S JTree aktualisieren Java Basics - Anfänger-Themen 4
M JTree aktualisieren Java Basics - Anfänger-Themen 3
E JTree - Element suchen Java Basics - Anfänger-Themen 5
G JTree Problem. Java Basics - Anfänger-Themen 5
G JTree Java Basics - Anfänger-Themen 2
E JTree - Verzeichnisbaum Java Basics - Anfänger-Themen 3
G JTree Frage Java Basics - Anfänger-Themen 5
G Ebene von JTree ermitteln? Java Basics - Anfänger-Themen 6
G Icons für JTree skalieren? Java Basics - Anfänger-Themen 3
G Standard JTree ausblenden? Java Basics - Anfänger-Themen 5
B JTree mit Verzeichnissen füllen Java Basics - Anfänger-Themen 17
G Object vor reload von JTree merken und danach wieder setzen? Java Basics - Anfänger-Themen 5
P Wert aus JTree in ComboBox setzen? Java Basics - Anfänger-Themen 2
G Problem mit Refresh von JTree Java Basics - Anfänger-Themen 11
lomtas Scrollbalken für JTree Java Basics - Anfänger-Themen 3
lomtas JTree Struktur im Nachhinein ändern Java Basics - Anfänger-Themen 2
K JTree verlinken Java Basics - Anfänger-Themen 3
T ArrayList mit Dateien in die richtigen Ordner eines JTree Java Basics - Anfänger-Themen 16
K JTree aus DB rekursiv füllen Java Basics - Anfänger-Themen 12
M Dateisystem in Jtree - Ordnericon darstellen Java Basics - Anfänger-Themen 4
G JTree vollständigen pfad anzeigen Java Basics - Anfänger-Themen 11
R JTree aus einer ArrayList Java Basics - Anfänger-Themen 9
J JTree Bilder Java Basics - Anfänger-Themen 2
G JTree.TreeListener Java Basics - Anfänger-Themen 12
S JTree valueChanged() Ausgabe leider immer mit Pfadangabe! Java Basics - Anfänger-Themen 4
S JTree aktualisieren bzw. komplett neu aufbauen Java Basics - Anfänger-Themen 6
G Scrollen im JTree Java Basics - Anfänger-Themen 17
G Hintergrundsfarbe für JTree Java Basics - Anfänger-Themen 15
F JTree-Knoten (DefaultMutableTreeNode) formatieren ? Java Basics - Anfänger-Themen 3
Y JTree: ein Knoten als Objekt Java Basics - Anfänger-Themen 2
J JTable / JTree: Unsichtbare Elemente Java Basics - Anfänger-Themen 4
G JTree Explorer Problem mit listRoots() Java Basics - Anfänger-Themen 9
V Jtree: Alle Verzeichnisse und Ordner anzeigen, aber wie? Java Basics - Anfänger-Themen 2
N Java Taschenrechner hat Jemand vlt einen Tipp dafür wie ich jetzt die buttons verbinden kann und das Ergebnis auf dem textfield anzeigen lassen kann Java Basics - Anfänger-Themen 13
W ListView komplett anzeigen Java Basics - Anfänger-Themen 2
BeginnerJava "Weihnachtsbäume" anzeigen: Höhe als Parameter Java Basics - Anfänger-Themen 1
sserio Problem beim Anzeigen Java Basics - Anfänger-Themen 5
Schniffi Nur bestimmte Bilder aus einem Array auf Image Button anzeigen lassen Java Basics - Anfänger-Themen 3
D Erste Schritte png in JFrame anzeigen? Java Basics - Anfänger-Themen 3
M PNG als Spieler im Fenster anzeigen Java Basics - Anfänger-Themen 4
M Anzahl Schleifendurchgänge nach x Sekunden anzeigen Java Basics - Anfänger-Themen 2
M Rekursives Programm zum Anzeigen von Primzahlen Java Basics - Anfänger-Themen 3
M Auf MainJFrame Panels anzeigen lassen Java Basics - Anfänger-Themen 19
Rubberduck Combobox-Werte in GUI anzeigen Java Basics - Anfänger-Themen 13
J Die größte Zahl anzeigen Java Basics - Anfänger-Themen 19
V_Fynn03 Kontostand anzeigen lassen von einer anderen Klasse Java Basics - Anfänger-Themen 3
C Erste Schritte Bilder nach Export anzeigen Java Basics - Anfänger-Themen 0
O Popoup Menü im JTable richtig anzeigen Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben