Arborescence disque triee avec jtree

Soyez le premier à donner votre avis sur cette source.

Vue 9 701 fois - Téléchargée 1 297 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

zegamemaster
Messages postés
27
Date d'inscription
mardi 2 septembre 2003
Statut
Membre
Dernière intervention
14 avril 2005
-
Je sais pas qui a mis deux comme note, mais moi, je trouve ca cool, ca m'a bien aider pour en faire une d'ailleur, j'ai aps encore bien tester remarque, mais a premiere vue, ca a l'air bien et rapide.
cs_aishu
Messages postés
17
Date d'inscription
vendredi 7 mai 2004
Statut
Membre
Dernière intervention
24 août 2004
-
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 !!
yannickdh
Messages postés
1
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
16 juin 2004
-
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
mandark
Messages postés
16
Date d'inscription
dimanche 25 janvier 2004
Statut
Membre
Dernière intervention
10 mai 2006
-
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;
Thiouwz03
Messages postés
3
Date d'inscription
samedi 26 mars 2005
Statut
Membre
Dernière intervention
14 juin 2006
-
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
}
}

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.