Explorateur

Polux6 Messages postés 55 Date d'inscription vendredi 7 février 2003 Statut Membre Dernière intervention 20 février 2004 - 27 juin 2003 à 20:23
desastreux Messages postés 50 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 5 août 2009 - 20 mai 2005 à 16:36
Salut, je sui en train d'essayer d faire un double explorateur d fichier. Seulement j'aimerai bien pouvoir (dans l'explorateur) n'avoir seulement que le nom du fichier (et pas tous son chemin). Mai pb, je n'y arrive pa!!! J'ai repris un projet qui été sur le site, pour lister tous les répertoire et fichier.
Un petit coup d main me serai utile
Merci

PS : j'ai essayer de convertir les roots[i] en String pour pouvoir utiliser la methode geName() qui me donne bien que le nom du fichier mais le pb c qu'une fois arrive dans la methode getSubDirs(String root) , si j'ai converti en string je n'arrive plus a transformer le string en file. Enfin en clair je bloque......
J'espere que g ete clair.
SVP Duss ou Dragon...............ou d'autre

private void remplirJTree(){
// 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
racine1.add(root);
}

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
racine2.add(root);
}
}

/**
* 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
*/
int k = 0;
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.list();
if ( list != null){
// pour chaque sous rep on appel cette methode => recursivité
for (int j = 1 ; j<list.length ; j++){
DefaultMutableTreeNode file = null;
file = getSubDirs(list[j].toString());
racine.add(file);
}
}
return racine;
}
}

Polux.6 8-)

8 réponses

cs_Duss Messages postés 890 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 29 juillet 2004 11
30 juin 2003 à 09:08
salut,
ben si tu fais un getname sur ton file tu ne recupere que le nom et pas le chemin ;)
Duss
0
Polux6 Messages postés 55 Date d'inscription vendredi 7 février 2003 Statut Membre Dernière intervention 20 février 2004
30 juin 2003 à 13:41
Ouai je sai mais le pb c ke je ne peu ajouter que des files à un DefaultMutableTreeNode, je ne peu pas ajouter d string.
Je sai pas comment il faut que j'utilise le getname dans la methode getSubDirs....

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 = 0 ; j<list.length ; j++){
DefaultMutableTreeNode file = new DefaultMutableTreeNode((getSubDirs(list[j])));
racine.add(file);
}
}
return racine;
}
Polux.6 8-)
0
Polux6 Messages postés 55 Date d'inscription vendredi 7 février 2003 Statut Membre Dernière intervention 20 février 2004
30 juin 2003 à 13:44
Ouai je sai mais le pb c ke je ne peu ajouter que des files à un DefaultMutableTreeNode, je ne peu pas ajouter d string.
Je sai pas comment il faut que j'utilise le getname dans la methode getSubDirs....

Erreur dans mon premier code

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 = 0 ; j<list.length ; j++){
DefaultMutableTreeNode file = null ;
file = getSubDirs(list[j]);
racine.add(file);
}
}
return racine;
}
Polux.6 8-)
0
cs_Duss Messages postés 890 Date d'inscription lundi 8 avril 2002 Statut Membre Dernière intervention 29 juillet 2004 11
30 juin 2003 à 13:46
pour construire un File :
File f = new File(tonstring);
Duss
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bloofi Messages postés 388 Date d'inscription mercredi 1 octobre 2003 Statut Membre Dernière intervention 3 mai 2006 2
11 juin 2004 à 13:09
DefaultMutableTreeNode(Object userObject)

Un String est un objet non ?

donc tu peux construire un noeud avec un String
(je le dis avec certaineté car ca marche dans mon cas)
0
facosh Messages postés 8 Date d'inscription dimanche 8 février 2004 Statut Membre Dernière intervention 8 avril 2004
1 oct. 2004 à 20:09
Salut

Moi aussi j'ai deja retourvé ce code. Mai j'ai fait autre chose !
Car le probleme de cette recursivité c'est que tu charges tous les repertoires au demarrage de l'application. Or il est a mon avis possible de faire le chargement au fur et a mesure des cliques faits sur le JTree, ce qui permet de diminuer le temps de chargement de l'appli.

Mais je n'ai pas encore fait les listener sur le JTree, mais je vais m'y attacher. voici ce que j'ai fait pour le moment :

import java.awt.Dimension;
import java.io.File;
import javax.swing.*;
import javax.swing.tree.*;
import java.awt.*;

/*
* Classe permettant d afficher l'arborescence des disque dur
*/
public class Explorateur extends JPanel {
    private File[]  _roots;
    private JTree   _dirs;
    private JPanel MonPanel  = new JPanel ();
        
    public Explorateur () {        
        // on recupère les lecteurs
        _roots = File.listRoots ();
        
        // on définit notre premier noeud
        DefaultMutableTreeNode racine = new DefaultMutableTreeNode ("Poste de travail",true);
        File [] listfile;
        // Création du jtree
        _dirs = new JTree (racine);
        
        // pour chaque lecteur
        for (int i = 0 ; i<_roots.length ; i++) {
        	// On fait le chargement des repertoires pour chaque lecteur
        	racine.add (ChargerRepertoire (_roots [i]) );
        }
        
        // on met le jtree dans un jscrollpane
        JScrollPane scroll = new JScrollPane (_dirs);
        scroll.setHorizontalScrollBarPolicy (JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        MonPanel.setLayout (new BorderLayout () );        
        // on ajoute notre jscrollpane
        MonPanel.add (scroll, BorderLayout.CENTER);
        setLayout (new BorderLayout () );
        add (MonPanel, BorderLayout.CENTER );
    }
    
    // Cette méthode permet de charger le repertoire Dossier
    public DefaultMutableTreeNode ChargerRepertoire (File Dossier) {
    	File [] listeFichier = Dossier.listFiles ();
    	DefaultMutableTreeNode repertoire = new DefaultMutableTreeNode (Dossier, true);
    	int i;
    
    	if (listeFichier != null) {
    		for (i = 0 ; i < listeFichier.length ; i++)	{
    			if (listeFichier[i].isDirectory () ) {
    				DefaultMutableTreeNode sousRepertoire = new DefaultMutableTreeNode (listeFichier[i].getName (), true);
    				repertoire.add (sousRepertoire);
    			}
    		}
    	}
    
    	return repertoire;
    }
}


Voila. Pour la suite je suis en train d'étudier le probleme.

++

facosh
0
yonteit Messages postés 1 Date d'inscription samedi 20 novembre 2004 Statut Membre Dernière intervention 21 novembre 2004
21 nov. 2004 à 11:55
J'ai fait quelque chose d'un peu différent. Je pense que si on veut travailler sur des fichiers, il vaut mieux garder le type File plutot que de ne prendre que le nom du fichier.
Il faut créer une classe Fichier qui redéfinit la méthode toString() de File, car dans la JTree, il va afficher implicitement file.toString().
Cela permet de garder la récurcivité.

Code :

import java.awt.Dimension;
import java.io.File;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.tree.*;

/**
* Classe permettant d afficher l'arborescence des disque dur
*/
public class Explorateur extends JFrame
{
private File[] _roots;
private JTree _dirs;

/**
* Méthode main
*/
public static void main(String[] args)
{
Explorateur ex = new Explorateur();
ex.setVisible(true);
ex.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}

/**
* Constructeur de la classe Explorateur
*/
public Explorateur()
{
// 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();
_dirs.setSize(1000,500);
_dirs.setShowsRootHandles(true);
_dirs.setModel(new DefaultTreeModel(racine, false) );

// pour chaque lecteur
for (int i = 0 ; i<_roots.length ; i++)
{
int compte = 0;
//if(_roots[i].canRead())
//{
// on recupère son contenu grace a getSubDirs
DefaultMutableTreeNode root = getSubDirs(_roots[i], compte);
// 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, int compte)
{
// 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 && compte<2)
{
compte++;
Fichier fich=null;
// pour chaque sous rep on appel cette methode => recursivité
for (int j = 0 ; j<list.length ; j++)
{
DefaultMutableTreeNode file = null;
if (list[j].isDirectory() && !list[j].isHidden())
{
fich = new Fichier(list[j].getPath());
file = getSubDirs(fich, compte);
racine.add(file);
System.out.println(list[j].getName());
}
}
}
return racine;
}
private class Fichier extends File
{
/**
* @param pathname
*/
public Fichier(String pathname)
{
super(pathname);
}

public String toString()
{
return super.getName();
}
}
}

Voilà. Il reste encore pas mal de chose à améliorer comme rajouter des évènements mais on verra par la suite.
0
desastreux Messages postés 50 Date d'inscription mardi 30 mars 2004 Statut Membre Dernière intervention 5 août 2009
20 mai 2005 à 16:36
Hello, un autre exemple d'explorateur de fichiers JAVA, de type JFileChooser.FileSystemView, cette fois, est sur :http://www.javafr.com/forum.v2.aspx?ID=277618
Il comporte entre autres l'avantage d''avoir le Favoris Réseau, sous Windows, et permets aussi le double affichage évoqué au début de ce POST.
Reste à l'implémenter en s'inspirant des codes ci-dessous, et peut-être à l'améliorer au niveau de l'évenementiel ( CLIC au lieu de double-CLIC, mulit-séléctions, menus contextuels, etc... )
En attendant le remake JAVA d'un explorateur Windows ( Mais qui soit plus performant en ce qui concerne les réseaux tout de même ! ), bien le salut !
0
Rejoignez-nous