IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[code propre] Lister les fichiers de repertoires


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 347
    Par défaut [code propre] Lister les fichiers de repertoires
    Bonjour à tous,

    Voilà, j'avais une problèmatique très simple qui s'est révélé très compliqué. Je sais pas si j'étais vraiment pas en forme ce jour là, mais j'ai pondu un code super compliqué... du moins je pense qu'on peux faire plus simple.

    Problème: Je souhaite avoir un tableau de File contenant tout les fichiers d'un repertoire de base, et d'une liste de répertoire. Dans la liste des repertoires les fichiers ajouter au tableau sont seulement les repertoires finissant pas "_sc".
    Pas dur ..? Surement ! Je souhaiterais avoir votre adie..
    Pour informations j'ai mis mon code "horrible" jai un peu honte mais bon.. C'est pour celà que je suis là d'un coté

    Merci davance



    La méthode ListerToutLesFichiers() : Prend en paramètre un tableau de String t contenant de le chemin de plusieurs repertoires. Le but est de retourner un tableau de File, contenant l'ensemble des fichiers de tout les repertoires se terminant par _sc. Je passe par un vector car je ne connais pas à l'avance le nombre de fichier que je vais avoir par avance.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
       private File[] ListerToutLesFichiers(String[] t) throws
    IOException
       {
          // t = Tableau contenant une liste de chemins repertoires
     
          Vector ids = new Vector(1, 1);
     
          // scan tout les repertoires pour mettre dans le vector les repertoire _sc
          for (int i = 0; i < t.length; i++)
          {
             //Test le nom du repertoire se termine par "_sc"
             if (t[i].startsWith("_sc"))
             {
                ids.add(t[i]);
             }
          }
     
          Vector vectorFiles= new Vector();
          for (int i = 0; i < ids.size(); i++)
          {
             File[] ListFiles = getListFileInDirectory((String) ids.get(i));
             //Evite l erreur si il y a aucun fichier dans le repertoire 
             if (ListFiles != null)
             {
                //Met tout les fichiers dans le vector
                for (int j = 0; j < ListFiles.length; j++)
                {
                 vectorFiles.add(ListFiles[j]);
                }
             }
          }
     
          //Convertie le vector en list de File
          File[] FileArray = new File[vectorFiles.size()];
          for (int i = 0; i < vectorFiles.size(); i++)
          {
             FileArray[i] = (File) vectorFiles.get(i);
          }
     
          return  templateList;
       }
    Fonction Main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
         //Recupere la liste des fichiers du repertoire de base
          pathBase = getRepertoireDeBase();
          File[] fileArrayBase = listDirectories(pathBase);
     
            //Recupere la liste des fichiers du repertoire en plus
          File[] fileArrayEnPlus =  ListerToutLesFichiers(getRepertoireEnPlus());
     
          //Creer la liste finale contenant tout les fichiers de tous les repertoires finissant pas _sc de la taille des 2 listes
          File[] ListeFinal = new File[fileArrayBase .length + fileArrayEnPlus .length];
     
         // Copie les 2 listes dans la liste finale
          System.arraycopy(fileArrayBase , 0, ListeFinal ,  0, fileArrayBase .length);
          System.arraycopy(fileArrayEnPlus , 0,ListeFinal , fileArrayBase .length, fileArrayEnPlus .length);

  2. #2
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    1/ ta méthode ne marche pas elle te donne tous les repertoires commencants par "_sc"

    2/ J'ai pas compris , tu veux les repertoires se terminant par "_sc" ou les fichiers ?



    tu sais qu'il est possible de creer un Filter à appliquer sur la méthode listFile ?


    Je reprends ton problème parce qu'il est pas super clair.
    En resumé tu veux :
    - Appeller une fonction ou autre en lui donnant une liste de répertoire à scanner
    - Pour chacun des répertoires se terminant par "_sc" retourner la liste des fichiers ?


    En fait le gros gros probleme c'est :
    1/ Récupérer la liste des repertoires se terminant par "_sc" ( utilise le filter )
    http://java.developpez.com/sources/?...sterRepertoire
    et modifier l'objet filter ( et la ligne return return !name.startsWith(".");

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       File dir = new File("d:\\temp");
     
     
             // It is also possible to filter the list of returned files.
             // This example does not return any files that start with `.'.
                 FilenameFilter filter = new FilenameFilter() {
                     public boolean accept(File dir, String name) {
                     return !name.endsWith("_sc");
                 }
             };
             File[] children = dir.list(filter);
    Apres pourquoi ne pas passer par un ArrayList au lieu d'un vector ?
    Avec un truc qui donne (en algo)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    list  = liste des repertoires finissant par _sc ( voir plus haut)
    Arraylist resultat 
     
    pour chaque element  i de list faire 
      listetemp = liste le contenu du reperetoire "list[i]"
      pour chaque element u de listemp faire 
        ajouter element[u] a resultat 
      fin pour ( listtemp)
     fin pou (list)
    voila

  3. #3
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Il est effectivement préférable de préférer une List (par exemple une ArrayList) au Vector .

    Sinon je ne pense pas qu'il y ai besoin d'un FilenameFilter puisque celui-ci s'utilise avec les méthodes list() et listFiles() de la classe File représentant le répertoire parent de ceux recherchés (or les répertoires sont ici sous forme de String).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private File[] listFiles(String ...dirs) {
        List<File> files = new ArrayList<File>();
        for(String dir : dirs) {
            if(dir.endsWith("_sc")) {
                files.addAll(dir.listFiles());
            }
        }
        return files.toArray(new File[0]);
    }
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  4. #4
    Membre chevronné Avatar de miloux32
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    545
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 545
    Par défaut
    Citation Envoyé par le y@m's
    Il est effectivement préférable de préférer une List (par exemple une ArrayList) au Vector .

    Sinon je ne pense pas qu'il y ai besoin d'un FilenameFilter puisque celui-ci s'utilise avec les méthodes list() et listFiles() de la classe File représentant le répertoire parent de ceux recherchés (or les répertoires sont ici sous forme de String).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private File[] listFiles(String ...dirs) {
        List<File> files = new ArrayList<File>();
        for(String dir : dirs) {
            if(dir.endsWith("_sc")) {
                files.addAll(dir.listFiles());
            }
        }
        return files.toArray(new File[0]);
    }
    Ben le filenamefilter c'etait juste lors de sa récupération des répertoires au debut, pourquoi s'embeter à les récupérer tous alors que seul les finissant par "_sc" sont souhaités ???

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Effectivement, je m'étais focalisé sur la fonction ListerToutLesFichiers() en zappant un peu le reste notament la récupération de la liste des répertoires .

    Par contre, pour lister uniquement les répertoires finissant par "_sc" je mettrais plutôt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public boolean accept(File dir, String name) {
        return dir.isDirectory() && name.endsWith("_sc");
    }
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 347
    Par défaut
    Le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private File[] listFiles(String ...dirs) {  
        List<File> files = new ArrayList<File>(); 
        for(String dir : dirs) {  
            if(dir.endsWith("_sc")) {  
                files.addAll(dir.listFiles()); 
            }  
        }  
        return files.toArray(new File[0]); 
    }
    A l'air très bien mais il compile pas,jai pas la jre 1.5

    De plus je le comprend pas :
    for(String dir : dirs) ???
    List<File> files = new ArrayList<File>()???

    Ai je dis que je connaissais java mais sans plus

  7. #7
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par laclac
    De plus je le comprend pas :
    for(String dir : dirs) ???
    List<File> files = new ArrayList<File>()???
    Effectivement si tu n'as pas Java 5, tu ne pourras pas utiliser la boucle for étendu et les génériques.

    Remplace le for étendu par une boucle for traditionnelle, le "String ...args" par "String[] args", et supprime les génériques.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

Discussions similaires

  1. Lister les fichiers d'un repertoire
    Par Galkir dans le forum C++Builder
    Réponses: 4
    Dernier message: 13/06/2006, 16h53
  2. lister les fichiers d'un repertoire par date
    Par ra77 dans le forum Langage
    Réponses: 1
    Dernier message: 02/06/2006, 04h02
  3. lister les fichiers d'un repertoire
    Par bmw13fr dans le forum C++
    Réponses: 2
    Dernier message: 14/04/2006, 12h26
  4. [TP]Lister les fichiers d'un répertoire
    Par nvtitan dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 21/06/2002, 12h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo