# Dateibaum mit TreeNode und JTree



## f.ritz (31. Mai 2004)

Hallo zusammen,


ich habe ein Problem mit dem Zugriff auf die Wechsellaufwerke.
Es werden mit Hilfe der Klasse TreNode Dateisysteme angeschafft und mit JTree dann dargestellt.
Leider kann ich aber nur auf die Festplatten zugreifen, nicht aber auf die Wechsellaufwerke, obwohl diese mitangezeigt werden.

Wo liegt das Problem?


```
import javax.swing.*;
import javax.swing.tree.*;
import java.io.*;
import java.awt.*;

public class Dateibaum extends JFrame
{
	static final int MAXTIEFE = 5;
	File file;
	
	public Dateibaum()
	{
		super ("Dateibaum");

		// Dateisysteme bestimmen
		File[] dirs = File.listRoots();		
        DefaultMutableTreeNode node, root = new DefaultMutableTreeNode("Arbeitsplatz");
        
        // Erstes Dateisystem rekursiv durchlaufen und hierarchische Struktur aufbauen
    	for(int i = 0; i < dirs.length; i++)
    	{
    		file = dirs[i];
   			node = new DefaultMutableTreeNode(file.getPath());
   			root.add(node);
   			traverse(file, node, MAXTIEFE);
   		}
		
		getContentPane().setLayout(new FlowLayout());
		getContentPane().add(new JTree(root));
		pack();
		setVisible(true);
	}
		
	static void traverse(File dir, DefaultMutableTreeNode parent, int tiefe)
	{
    	if (dir.isDirectory() && tiefe > 0) {
    		// Liste der Einträge erstellen
	    	File[] entries = dir.listFiles();
    		
    		if (entries != null)
    		{
    			DefaultMutableTreeNode node;
    			// Liste durchlaufen, wenn Verzeichnis rekursiver Durchlauf
    			for (int i = 1; i < entries.length; ++i) {
    				node = new DefaultMutableTreeNode(entries[i].getName());
    				parent.add(node);
      				if (entries[i].isDirectory())
        				traverse(entries[i], node, tiefe-1);
    			}
    		}
    	}
  	}

	public static void main(String[] args)
  	{
  		new Dateibaum();
  	}
}
```


----------



## Roar (31. Mai 2004)

benutze anstatt File.listRoots folgendes:


```
import javax.swing.filechooser.FileSystemView // importieren...
// blablabla

FileSystemView fsv = FileSystemView.getFileSystemView();
File[] roots = fsv.getRoots();
```

das liefert dir auch die virtuellen roots deines OSs

ist das das was du willst? in FileSystemView gibts auch noch einige methoden wie z.b. isFloppyDrive(File f) etc.


----------



## f.ritz (1. Jun 2004)

Komisch aber es wird mir dann nur ein File-Element(Deskrop) als Root geliefert.

Somit kann ich auf keine weiter Laufwerke zugreifen!?!?!?!


----------



## Roar (1. Jun 2004)

ja das sind halt die System File Roots.



> getRoots
> 
> public File[] getRoots()
> 
> Returns all root partitions on this system. For example, on Windows, this would be the "Desktop" folder, while on DOS this would be the A: through Z: drives.



dann musst du halt desktop.listFiles() machen und dann kriegst du arbeitsplatz und dort auch listFiles(); und dann hast du alle roots...

überprüfen ob das die richtigen sind geht halt mit isComputerNode() und isDrive() und so.


----------

