2012-04-14 2 views
0

La méthode File.listRoots() renvoie le tableau de fichiers représentant tous les dossiers racines du système. Je veux créer un fichier logique et ajouter toutes ces racines, donc je peux appeler une méthode qui prend File comme argument.Comment créer un répertoire de fichiers et des fichiers contenus à partir d'un tableau de fichiers

Par exemple, compte tenu de cette pseudo-méthode:

void xyz(final File f) { 
    // .... 
} 

final File roots = somekindofwrapper(File.listRoots()); 
xyz(roots); 

L'exigence est que roots dans le pseudo-code ci-dessus un fichier logique contenant toutes les racines du système. Est-ce possible?

import javax.swing.*; 
    import java.io.File; 
    public class FileTreeDemo { 



    public static void main(String[] args) { 

    try{ UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
     }catch(Exception e){ 
      System.out.println("cant done"); 
     } 
    // Create a JTree and tell it to display our model 
    JTree tree = new JTree(); 

    // The JTree can get big, so allow it to scroll 
    JScrollPane scrollpane = new JScrollPane(tree); 
     // Figure out where in the filesystem to start displaying 

    File[] roots = File.listRoots(); 
    FileTreeModel model = new FileTreeModel(null); 


    // for(File root: roots) 
    // { 
    model=new FileTreeModel(roots[0]); 
     tree.setModel(model); 
    // } 




    JFrame frame = new JFrame("FileTreeDemo"); 
    frame.getContentPane().add(scrollpane, "Center"); 
    frame.setSize(400,600); 
    frame.setVisible(true); 

    } 

    } 


    import java.io.File; 

    import javax.swing.event.TreeModelListener; 
    import javax.swing.tree.DefaultTreeSelectionModel; 
    import javax.swing.tree.TreeModel; 
    import javax.swing.tree.TreePath; 
    import javax.swing.tree.TreeSelectionModel; 

    public class FileTreeModel extends DefaultTreeSelectionModel implements TreeModel{ 
    // We specify the root directory when we create the model. 

    protected File root; 
    public FileTreeModel(File root) { this.root = root; 
    //setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); 
    } 

    // The model knows how to return the root object of the tree 
    public Object getRoot() { return root; } 

    // Tell JTree whether an object in the tree is a leaf 
    public boolean isLeaf(Object node) { return ((File)node).isFile(); } 

    // Tell JTree how many children a node has 
    public int getChildCount(Object parent) { 
    String[] children = ((File)parent).list(); 
    if (children == null) return 0; 
    return children.length; 
    } 

    // Fetch any numbered child of a node for the JTree. 
    // Our model returns File objects for all nodes in the tree. The 
    // JTree displays these by calling the File.toString() method. 
    public Object getChild(Object parent, int index) { 
    String[] children = ((File)parent).list(); 
    if ((children == null) || (index >= children.length)) return null; 
    return new File((File) parent, children[index]); 
    } 

    // Figure out a child's position in its parent node. 
    public int getIndexOfChild(Object parent, Object child) { 
    String[] children = ((File)parent).list(); 
    if (children == null) return -1; 
    String childname = ((File)child).getName(); 
    for(int i = 0; i < children.length; i++) { 
    if (childname.equals(children[i])) return i; 
    } 
    return -1; 
    } 

    // This method is invoked by the JTree only for editable trees. 
    // This TreeModel does not allow editing, so we do not implement 
    // this method. The JTree editable property is false by default. 
    public void valueForPathChanged(TreePath path, Object newvalue) {} 

    // Since this is not an editable tree model, we never fire any events, 
    // so we don't actually have to keep track of interested listeners*/ 
    public void addTreeModelListener(TreeModelListener l) {} 
    public void removeTreeModelListener(TreeModelListener l) {} 

    } 
+1

On ne sait pas ce que vous essayez de faire. Que voulez-vous dire en ajoutant toutes les racines à ce fichier? Copiez-les? Ajouter des liens? –

+0

http://docs.oracle.com/javase/tutorial/essential/io/links.html –

+0

Je ne suis pas sûr de cela, mais comme dans l'exemple ci-dessus, je veux une variable de type de fichier qui doit avoir toutes les racines dans Je peux donc passer cette variable au constructeur FileTreeModel pour obtenir un modèle Tree. –

Répondre

1

L'objet fichier est une représentation d'un fichier physique sur le système, vous ne pouvez pas créer arbitrairement « fichiers virtuels » avec des groupes d'autres fichiers en eux, divorcées de la réalité du système d'exploitation sous-jacent. Le plus proche vous pourriez probablement venir à ce que vous cherchez à faire, il faudrait créer un dossier sur le système avec des liens symboliques à toutes les racines - quelque chose que vous pouvez faire en Java 7. Mon intestin me dit que vous essayez d'intégrer avec le code existant quel point je vais demander - quel est l'impact négatif de l'appel de votre fonction avec chaque fichier racine, l'un après l'autre?

+0

voir le code ci-dessus J'essaie de montrer tous les lecteurs n leur contenu. mais si j'appelle FileTreeModel en utilisant la boucle, ses chevauchements se chevauchent sur les autres et seul le dernier disque est visible. C'est ça. –

Questions connexes