begin process at 2008 05 12 09:58:59
1 170 182 membres
85 nouveaux aujourd'hui
13 956 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

COMMENT LISTER L'ARBORESCENCE DES DISQUE DUR DANS UN JTREE


Information sur la source

Catégorie :Astuces Classé sous : arborescence, disque, dur, jtree, explorateur Niveau : Initié Date de création : 14/05/2003 Date de mise à jour : 14/05/2003 13:10:07 Vu : 17 719

Note :
8,5 / 10 - par 10 personnes
8,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (39)
Ajouter un commentaire et/ou une note


Description

Cette source sert a générer la partie gauche de l explorateur windows ;)
la partie droite viendra apres !!!

Source

  • import java.awt.Dimension;
  • import java.io.File;
  • import javax.swing.*;
  • import javax.swing.tree.*;
  • /**
  • * Classe permettant d afficher l'arborescence des disque dur
  • */
  • public class Explorer extends JFrame
  • {
  • private File[] _roots;
  • private JTree _dirs;
  • public Explorer()
  • {
  • // taille de la fenetre
  • setSize(500,500);
  • // on recupère les lecteurs
  • _roots = File.listRoots();
  • // on définit notre premier noeud
  • DefaultMutableTreeNode racine = new DefaultMutableTreeNode("Poste de travail",true);
  • // Création du jtree
  • _dirs = new JTree(racine);
  • _dirs.setSize(1000,500);
  • // pour chaque lecteur
  • for (int i = 1 ; i<_roots.length ; i++)
  • {
  • // on recupère son contenu grace a getSubDirs
  • DefaultMutableTreeNode root = getSubDirs(_roots[i]);
  • // et on l ajoute a notre premier noeud
  • racine.add(root);
  • }
  • // on met le jtree dans un jscrollpane
  • JScrollPane scroll = new JScrollPane(_dirs);
  • scroll.setPreferredSize(new Dimension(600,600));
  • scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
  • // on ajoute notre jscrollpane
  • getContentPane().add(scroll);
  • }
  • /**
  • * Méthode récursive permettant de récupérer
  • * tous les fichiers et sous dossiers d un autre
  • * @param root un File qui représente le lecteur ou le repertoire de départ
  • * @return DefaultMutableTreeNode
  • */
  • public DefaultMutableTreeNode getSubDirs(File root)
  • {
  • // on créé un noeud
  • DefaultMutableTreeNode racine = new DefaultMutableTreeNode(root,true);
  • // on recupère la liste des fichiers et sous rep
  • File[] list = root.listFiles();
  • if ( list != null)
  • {
  • // pour chaque sous rep on appel cette methode => recursivité
  • for (int j = 1 ; j<list.length ; j++)
  • {
  • DefaultMutableTreeNode file = null;
  • if (list[j].isDirectory())
  • { file = getSubDirs(list[j]);
  • racine.add(file);
  • }
  • }
  • }
  • return racine;
  • }
  • //main
  • public static void main(String[] args)
  • {
  • Explorer ex = new Explorer();
  • ex.setVisible(true);
  • }
  • }
import java.awt.Dimension;
import java.io.File;
import javax.swing.*;
import javax.swing.tree.*;

/**
 * Classe permettant d afficher l'arborescence des disque dur
 */
public class Explorer extends JFrame
{
	private File[] 	_roots;
	private JTree		_dirs;
		
	public Explorer()
	{
		// taille de la fenetre
		setSize(500,500);
		
		// on recupère les lecteurs
		_roots = File.listRoots();
		
		// on définit notre premier noeud
		DefaultMutableTreeNode racine = new DefaultMutableTreeNode("Poste de travail",true);
		
		// Création du jtree
		_dirs = new JTree(racine);
		_dirs.setSize(1000,500);
		
		// pour chaque lecteur
		for (int i = 1 ; i<_roots.length ; i++)
		{
			// on recupère son contenu grace a getSubDirs
			DefaultMutableTreeNode root = getSubDirs(_roots[i]);
			// et on l ajoute a notre premier noeud
			racine.add(root);
			
		}
		
		// on met le jtree dans un jscrollpane
		JScrollPane scroll = new JScrollPane(_dirs);
		scroll.setPreferredSize(new Dimension(600,600));
		scroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
				
		// on ajoute notre jscrollpane
		getContentPane().add(scroll);
	}
	
	/**
	 * Méthode récursive permettant de récupérer
	 * tous les fichiers et sous dossiers d un autre
	 * @param root un File qui représente le lecteur ou le repertoire de départ
	 * @return DefaultMutableTreeNode
	 */
	public DefaultMutableTreeNode getSubDirs(File root)
	{
		// on créé un noeud
		DefaultMutableTreeNode racine = new DefaultMutableTreeNode(root,true);
		
		// on recupère la liste des fichiers et sous rep 
		File[] list = root.listFiles();
		
		if ( list != null)
		{
			// pour chaque sous rep on appel cette methode => recursivité
			for (int j = 1 ; j<list.length ; j++)
			{
				DefaultMutableTreeNode file = null;
				if (list[j].isDirectory())
				{	file = getSubDirs(list[j]);  
					racine.add(file);
				}
			}
		}
		return racine;
	}
	
	//main
	public static void main(String[] args)
	{
		Explorer ex = new Explorer();
		ex.setVisible(true);
	}
	
	
}
  • signaler à un administrateur
    Commentaire de colo le 05/07/2003 00:00:52

    une petite correction : for (int j = 0 ; j &lt; list.length ; j++)
                                                  ^^
    Voila sinon tout marche bien. :)

  • signaler à un administrateur
    Commentaire de erfandis42 le 21/07/2003 15:01:36

    Ta source ma bcp aidé a comprendre mais je nage tjrs...
    chuis noob sur java, et les tuto que j'ai vu sur le JTree sont pas clair du tout pour moi, deplus j'utilise Sun one, et pour ce composant c vraiment mal foutu !!! Tu pourrai me donner un exemple tout con, pour la création d'un arbre a afficher, avec des trucs bidons !?

  • signaler à un administrateur
    Commentaire de erfandis42 le 21/07/2003 15:07:33

    Bon, alors j'arrive à faire mon noeud racine, à lui rajouter des fils (enfin je pense), mais au lieu de m'afficher mon arbre, il m'affiche plus rien !!!! (enfin c mieu que de m'afficher leur arbre exemple tout pouris, ki s'affiche meme quant tu as rien coder derriere...loul) Je comprend plus rien !!!!

  • signaler à un administrateur
    Commentaire de erfandis42 le 21/07/2003 15:26:35

    C bon !!! En faite, c'était juste un probleme de portée de variable :op
    Ne te tracasse po, ma variable dans laquel y'avait le modele du Jtree etait local à ma fonction, ca marchai po au debut, alors je l'avais redéclaré en général hihihi, alors qu'il y avait rien dedans.... lol
    C'était donc normal qu'il ne m'affiche rien !!! :op
    Encore desolé de t'avoir dérangé... bon code !

  • signaler à un administrateur
    Commentaire de genius83 le 31/08/2003 12:42:38

    C super ! Merci pour ton aide. J'essaierai et j'apporterai des remarks later.

  • signaler à un administrateur
    Commentaire de geoloft le 06/11/2003 10:47:14

    Bonjour et merci pour ce source.

    Là je sens que je vais devenir pénible : est il possible d'avoir le même exemple sous forme d'Applet ?

    Pourquoi ? parce que je suis tout nouveau dans le Java et que je rame comme un fou. J'ai déjà essayé de le faire mais franchement j'ai pas de succès.

    D'avance merci.

  • signaler à un administrateur
    Commentaire de Yenapa le 17/11/2003 09:09:12

    C bien mais c un peu lent ton truc...
    Y'a pas moyen de l'accelerer par exemple en parcourant un sous-dossier seulement quand on en a besoin? J'ai essayé mais certains dossier n'apparaissent parfois pas dans le JTree et d'autres apparaissent parfois 2 fois ou plus...

    Merci

  • signaler à un administrateur
    Commentaire de UNi le 20/11/2003 15:55:48

    excellent merci !!

    meme si ca rame un peu c vachement bien ca va me permettre de comprendre les JTREE

  • signaler à un administrateur
    Commentaire de noname le 12/07/2004 08:28:26

    Très bon exemple d'utilisation d'un jTree. Bravo!

    geoloft -> si jamais, tu peux réutiliser le même code dans ton applet (en utilisant bien sur le JRE de Sun, ainsi que son plugin pour ton navigateur favori). Un petit détail, il faut aussi que les gens qui accèdent à ton applet via le web aient aussi ce plugin de Sun installé autrement, la librairie SWING ne sera pas prise en charge.

  • signaler à un administrateur
    Commentaire de vin100time le 23/07/2004 11:37:42

    ben écoute, je sais pas pourquoi, mais chez moi, quand je teste ton code, mon ordi rame, c'est tout ce que se passe, rien ne s'affiche. Si quelqu'un a une idée?

  • signaler à un administrateur
    Commentaire de eio le 21/08/2004 17:15:56

    Félicitation pour ce code. C'est pas que les autres sources sur le sujet ne sont pas bonnes, au contraire, mais la tienne est claire, simple et très légère. Pour quelqu'un comme moi qui commence avec les JTree, c'est A++++ parce que j'y vais étape par étape.

  • signaler à un administrateur
    Commentaire de DbM le 13/10/2004 11:44:43

    Franchement super ce code, au moins là je commence à comprendre comment marchent les JTree ^^
    Un grand merci à toi !

  • signaler à un administrateur
    Commentaire de babou6a le 27/11/2004 12:41:15

    Bonjour,
    Ce code est vraiment super clair et bien expliqué !! bravo !
    J'ai juste une petite question : listRoots() te permet de partir de "tout en haut de la hierarchie" ... comment peut on faire pour lui dire de partir du repertoire courant par exemple ?
    Merci beaucoup !

  • signaler à un administrateur
    Commentaire de Duss le 27/11/2004 13:38:48

    euh essayes un getSubDirs sur "." ou sinon tu met le chemin que tu veux

  • signaler à un administrateur
    Commentaire de babou6a le 29/11/2004 19:39:12

    oui mais ou ? je comprend comment faire mais je ne vois pas trop comment !
    Merci

  • signaler à un administrateur
    Commentaire de Yenapa le 29/11/2004 19:55:54

    Comme ca:

    Tu remplace:
    // pour chaque lecteur
            for (int i = 1 ; i<_roots.length ; i++)
            {
                // on recupère son contenu grace a getSubDirs
                DefaultMutableTreeNode root = getSubDirs(_roots[i]);
                // et on l ajoute a notre premier noeud
                racine.add(root);
                
            }

    par
    racine = getSubDirs(Objet file qui pointe vers ou tu veux)

    Et puis remplace
    DefaultMutableTreeNode racine = new DefaultMutableTreeNode("Poste de travail",true);

    par
    DefaultMutableTreeNode racine; (c pas la peine de l'initialiser par "poste de travail" vu que ce sera remplacé apres...)

    G pas testé mais bon, c un truc comme ca.

  • signaler à un administrateur
    Commentaire de babou6a le 30/11/2004 18:54:19

    c super sympa mais j'ai encore quelques hesitation : l' "Objet file qui pointe vers ou tu veux" comment je fais ?
    J'ai crée un File :
    File courant = new File("Arborescence");
    Mais je ne sais pas comment lui dire de pointer sur le repertoire que je veux ! :-)
    Merci

  • signaler à un administrateur
    Commentaire de Duss le 30/11/2004 19:25:19

    new File("c:/monrep")

  • signaler à un administrateur
    Commentaire de babou6a le 01/12/2004 19:26:13

    Merci beaucoup beaucoup ! j'ai reussi !

  • signaler à un administrateur
    Commentaire de CornFlaks le 31/01/2005 19:33:25


            // pour chaque lecteur
            for (int i = 1 ; i<_roots.length ; i++)

    tu peux retirer la boucle pour ne recuperer qu'un seul lecteur ou "i" représente le lecteur choisit. 0 -> A: / 1 -> C: / 2 -> D: etc...



  • signaler à un administrateur
    Commentaire de sheorogath le 05/05/2005 16:19:44 administrateur CS

    ya qu'un default le temps de lancement du programe
    sinon c vraiment bien et il est vrai que les JTree sont pas tres documenter

  • signaler à un administrateur
    Commentaire de Yenapa le 05/05/2005 16:35:18

    Ouai c clair
    L'ideal serais de ne parcourir un dossier que si il y a besoin..
    Je n'ai pas reussi, ca buggait avec les petits plus qu'il y a coté du dossier.
    Et puis g abandonné ce programme... mais l'idée peut encore servir

  • signaler à un administrateur
    Commentaire de sheorogath le 05/05/2005 17:41:07 administrateur CS

    moi g un autre probleme :
    je voudrais que les fichier soit afficher et pas que les dossier
    je me doute que le code a modifier est la :
       for (int j = 1; j < list.length; j++) {
                    DefaultMutableTreeNode file = null;
                    if (list[j].isDirectory()) {
                        file = getSubDirs(list[j]);
                        racine.add(file);
    mais je sais pas quoi ajouter
    vs avez pas une idee ?

  • signaler à un administrateur
    Commentaire de Yenapa le 05/05/2005 21:18:00

    Modifie dans la methode getSubDirs

    if (list[j].isDirectory())
                    {   file = getSubDirs(list[j]);
                        racine.add(file);
                    }

    en

                        file = getSubDirs(list[j]);
                        racine.add(file);
                    
    C'est la condition if (list[j].isDirectory()) qui fait que les fichiers sont ignorés.

  • signaler à un administrateur
    Commentaire de sheorogath le 06/05/2005 19:40:14 administrateur CS

    merci bcp

  • signaler à un administrateur
    Commentaire de sheorogath le 08/06/2005 16:06:52 administrateur CS

    je voudrais savoir comment ta fonction getSubDirs() peut marche?!
    tu pourrai pas l'expliquer un peut mieu stp
    car je voudrais arriver a modifier la fonction pour qu'elle n'affiche pour l'instant que les disque dur et poue ensuite ajouter des actionlistener pour ne montre que les sous dossier
    dont on a besoin d'afficher.

  • signaler à un administrateur
    Commentaire de sheorogath le 08/06/2005 16:23:26 administrateur CS

    je suis arriver a mettre que les dd mais je voudrais si ca te derange pas que tu m'explique comment fonctionne ta fonction stp

  • signaler à un administrateur
    Commentaire de sheorogath le 08/06/2005 16:23:56 administrateur CS

    je suis arriver a mettre que les dd mais je voudrais si ca te derange pas que tu m'explique comment fonctionne ta fonction stp

  • signaler à un administrateur
    Commentaire de pseudal le 16/02/2006 17:52:31

    Et sous linux on fait comment ???

  • signaler à un administrateur
    Commentaire de sheorogath le 16/02/2006 18:02:29 administrateur CS

    c la meme chose

  • signaler à un administrateur
    Commentaire de Yenapa le 16/02/2006 18:14:18

    GetSubDirs crée un objet DefaultMutableTreeNode (que j'appelerai d apres) pour un dossier (que j'appelerai dir)

    pour chaque dossier de dir, on appele recursivement la methode GetSubDirs, et on ajoute le resultat a d.
    Pareil pour les fichiers il me semble (ca date et j'ai la flemme de me replonger dedans)

    Pour linux, t'a pas besoin de trouver les lecteurs racines, etant donné que la racine de l'arborescence est "/"


  • signaler à un administrateur
    Commentaire de moh___SBA le 16/02/2007 12:07:30

    Votre programme fonctionne bien
    bon courage

  • signaler à un administrateur
    Commentaire de Yenapa le 16/02/2007 21:49:04

    ^^ bien joué, un an jour pour jour apres

  • signaler à un administrateur
    Commentaire de gbordet le 11/06/2007 16:22:04

    Salut Yenapa
    Je ne sais pas si tu fais encore un  peu le support ici, mais je n'arrive pas a voir d'arborescence sous Kubuntu... Je Galere un peu ^^

    En fait, je ne comprend pas ou est ce que ca differe entre Windows et Linux dans la recherche des répertoires...

    Merci d'avance ^^

  • signaler à un administrateur
    Commentaire de sheorogath le 11/06/2007 16:27:50 administrateur CS

    essai en changeant ca :
    for (int i = 1 ; i<_roots.length ; i++)
    en
    for (int i = 0 ; i<_roots.length ; i++)

    sous linux tu n'as qu'une seule racine... sous windows c'etait pour zapper le lecteur de disquette

  • signaler à un administrateur
    Commentaire de gbordet le 11/06/2007 22:51:31

    Ca y est, ca marche ... Donc pour linux :
    Dans le constructeur, il faut enlever la boucle... je m'explique :

    private File[] _roots; ----> devient ---> private File _roots;
    _roots = File.listRoots(); ----> devient ---> _roots = new File("/home/"); (dans mon cas)
    et ensuite on vire la boucle For qui est dans le constructeur (on en touche pas à celle dans la méthode)

    Et chez moi, ca marche enfin ^^
    Voila, merci pour tout !

  • signaler à un administrateur
    Commentaire de Yenapa le 12/06/2007 20:52:57

    Salut

    Tout a fait ca

    Sous windows, il y a plusieurs "racines" (a:, b:, c:, d: .....). On ne peut pas les deduire par nous meme, sauf en les testant une par une, donc il faut faire appel a la methode listRoots().
    En revanche sous linux, il n'existe qu'une seule racine.
    Au lieu d'avoir une boucle qui parcours un tableau des File 'racines' (sous windows), on a qu'un seul objet File racine tel que racine = new File("/");
    Cependant, j'aurai cru que sous linux la methode listRoots aurai retourné un tableau contenant seulement un objet file, correspondant a "/"

  • signaler à un administrateur
    Commentaire de danyboy85 le 01/04/2008 17:52:42

    Bonjour à tous,

    Car sur mon PC d'entreprise j'ai une dizaine de lecteurs réseau et là, ca rame à mort ce qui est normal étant donné qu le programme parcourir tous les répertoires de tous les lecteurs. Est-il possible de les zapper et de ne gérer que les lecteurs locaux ?

    Merci d'avance

  • signaler à un administrateur
    Commentaire de danyboy85 le 01/04/2008 17:54:15

    Ne pas lire le mot "Car" sur mon post précédent pour avoir une phrase francaise. Désolé.

Ajouter un commentaire

Appels d'offres

Pub



CalendriCode

Mai 2008
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Téléchargements

Logiciels à télécharger sur le même thème :

Boutique

Boutique de goodies CodeS-SourceS