Arborescence disque triee avec jtree

Soyez le premier à donner votre avis sur cette source.

Vue 9 999 fois - Téléchargée 1 383 fois

Description

But : obtenir une arborescence de vos lecteurs sans que cela ne dure des heures (petits malins qui avez des Go de données sur vos immenses disques). J'utilise un MAX_LEVEL permettant de ne descendre que d'un nombre de niveau définit dans les arborescence. Ceci permet de limiter le temps de chargement. Une fois le JTree affiché, on écoute les évenements et notamment TreeExpanded qui lancera une recherche dans l'arborescence ouverte jusqu'à MAX_LEVEL... Et ainsi de suite.
Pour conserver l'objet FILE associé à chaque noeud j'ai créé une sous-classe FSNode qui me permet de conservé l'info.
J'ai également agrémenté mon code d'un Quick Sort (Tri rapide) afin d'obtenir la liste des éléments triée.

Enfin j'ai intégré mon JTree dans un JScrollPane afin de pouvoir utiliser les ascenceurs...

Bon j'espère qu'il y a pas trop de bétises dans ce code, cela fait seulement deux à trois semaines que je fais du JAVA... Toutes mes excuses sinon et les commentaires seront les bienvenus.

Conclusion :


Code écrit avec JBuilder (le zip contient le répertoire du Projet).

Codes Sources

A voir également

Ajouter un commentaire Commentaires
mzhunix Messages postés 18 Date d'inscription lundi 14 janvier 2002 Statut Membre Dernière intervention 2 février 2009
21 avril 2008 à 11:05
Bonjour,
solution pour le problème relevé par yannickdh.

il faut ajouter un attribut "IsFirstExpanded" de type boulean à la classe FSNode qui sera à false par défaut et qu'on mettra à true lors à la fin de l'évenement "Expansion".
tester ensuite cette attribut dans au début de l'événement "Expansion" : si true ne rien faire sinon faire les appels nécessaire.

je n'ai vu tout le code, donc je vous ai donné ici la marche à suivre pour.
Bon courage.
Thiouwz03 Messages postés 3 Date d'inscription samedi 26 mars 2005 Statut Membre Dernière intervention 14 juin 2006
12 juin 2006 à 15:26
Salut tout le monde, merci pour ton code FredRaid, ca me fait gagner beacoup de temps.
En effet je découvre aujourd'hui les JTree :)
Bon, je me suis cassé la tête sur le problème du lecteur de disquette, alors l'endroit ou l'exception peut être détectée est dans addFolder lorsque l'on fait listFiles sur driveOrDir :
fileList = driveOrDir.listFiles();

vous verez dans la doc, listFiles est sensé levé une SecurityException "SI" un SecurityManager est présent, et voila le problème, je n'arrive pas à un créer un.

Sinon, pour le bug relevé par Aishu sur l'Expension, il suffit de tester dans addFolder si le noeud a déjà des fils ou non :

private void addFolder(File driveOrDir, DefaultMutableTreeNode node, int level) {
File[] fileList;
fileList = driveOrDir.listFiles();

if (fileList != null) {
sortFiles(fileList); // on tri les elements
}

// on ne cherche pas plus loin que le niveau maximal définit
if (level > MAX_LEVEL - 1) {return;}
// pour chaque élément
if (node.getChildCount() == 0) {
try {
for (int i = 0; i < fileList.length; i++) {
// en fonction du type d'élément
if (fileList[i].isDirectory()) {
// si c'est un répertoire on créé un nouveau noeud
FSNode dir = new FSNode(fileList[i].getName(), fileList[i]);
node.add(dir);
// on recherche les éléments (récursivité)
addFolder(fileList[i], dir, ++level);
}
if (fileList[i].isFile()) {
// si c'est un fichier on ajoute l'élément au noeud
node.add(new FSNode(fileList[i].getName(), fileList[i]));
}
}
}
catch (NullPointerException e) {
// rien
}
}
mandark Messages postés 16 Date d'inscription dimanche 25 janvier 2004 Statut Membre Dernière intervention 10 mai 2006
11 mars 2006 à 12:54
Super code !
Mais j'ai un bug ...
Je suis sur un portable qui à un lecteur de cartes mémoires qui vous l'aurez devinné n'a pas forcément une carte mémoire dedans :X
Donc quand le programme liste les roots il tombe dessus et me lance le message windaube "Il n'y a pas de disque dans le lecteur. Insérez un disque dans le lecteur K:"
J'ai essayé de mettre un "if(drive[i].canRead()){" mais il me lance le message au moment du il fait son canRead donc je ne sais pas comment tester ca ...

Donc -1 pour "bug non géré" ca faut 9 ! (o;
yannickdh Messages postés 1 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 16 juin 2004
16 juin 2004 à 16:04
tres bien le code,c vrai que c'est le plus rapide, mais auriez vous la solution a mettre dans collapsed pour supprimer les noeuds une fois que l'on referme? merci beaucoup
cs_aishu Messages postés 17 Date d'inscription vendredi 7 mai 2004 Statut Membre Dernière intervention 24 août 2004
9 juin 2004 à 14:09
Bien ton code, d'ailleurs c'est le meilleur que j'ai trouvé... Mais malgré tout il y a un petit problème... Au moment de faire ton Expansion, tu ajoute le noeud et le probleme est que si tu fais plusieurs Expansion sur un même noeud, tu verra que les sous fichiers apparaisent autant de fois que tu as fais d'Expansion...Il faudrait peut-être faire un remove (tte l'opération en sens inverse : à chaque fois que tu fais un treeCollapsed, tu supprime les fichiers ajoutés) Ca pourrait être une solution... En vois tu une autre plus efficace ?? Ca me rendrait bien service... Merci !!
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.