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) {}
}
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? –
http://docs.oracle.com/javase/tutorial/essential/io/links.html –
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. –