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 :

Tri d'un objet File


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2002
    Messages : 9
    Par défaut Tri d'un objet File
    Bonjour à tous,

    J'ai un objet File qui contient une arborescence de fichiers et répertoires.

    Quand je parse cet objet, il me fait un classement par nom (sans tenir compte que ce soit un fichier ou un répertoire).

    J'aimerais faire un tri de cet objet pour afficher d'abord les répertoires puis les fichiers (un peu comme dans l'explorateur Windows)

    Comment faire ça?

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Quelque chose dans ce style ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    File racine = new File("....");
    Collection<File> files = new LinkedHashSet<File>();
    Collection<File> directories = new LinkedHashSet<File>();
    for (File f : racine.listFiles()) {
        if (f.isDirectory())
            directories.add(f);
        else
            files.add(f);
    }

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2002
    Messages : 9
    Par défaut
    En fait là tu sépares les fichiers et répertoires.

    Mon but est de garder l'arborescence d'origine mais quand on la liste cette fois, apparaitront en 1er les répertoires puis les fichiers (et de même pour les sous répertoires).

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Bah après tu rassembles le tout :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    directories.addAll(files);
    Mais bon peut-être qu'il y a mieux...

  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
    Tu peux utiliser la méthode statique sort() de la classe Arrays en y spécifiant un Comparator hadoc .
    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 chevronné
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    442
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 442
    Par défaut
    Ah oui, effectivement avec un Comparator ce sera nettement mieux, plus propre surtout !

  7. #7
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Trie la liste renvoyée par listFiles() avec un comparateur maison.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public int compare(Object o1, Object o2) {
      File f1 = (File) o1;
      File f2 = (File) o2;
      boolean f1Dir = f1.isDirectory();
      boolean f2Dir = f2.isDirectory();
      if (f1Dir == f2Dir) {
        return f1.getName().compareTo(f2.getName()); // pas sûr du getName() ?
      } else {
        return f1Dir ? -1 : +1;
      }
    }

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Avril 2002
    Messages : 9
    Par défaut
    Yes ça marche !!!


    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
    File[] lTabFileFichiers = lFileRepertoire.listFiles();
     
                Arrays.sort(lTabFileFichiers, new Comparator() {
                    public int compare(Object o1, Object o2) {
                        File f1 = (File) o1;
                        File f2 = (File) o2;
                        boolean f1Dir = f1.isDirectory();
                        boolean f2Dir = f2.isDirectory();
                        if (f1Dir == f2Dir) {
                          return f1.getName().compareTo(f2.getName()); // pas sûr du getName() ?
                        } else {
                          return f1Dir ? -1 : +1;
                        }
                      }
                });
    Merci !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 27/03/2007, 15h32
  2. ouverture objet File
    Par clairette dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 09/11/2006, 13h49
  3. Erreur : Error while trying to write to file
    Par WebPac dans le forum Installation
    Réponses: 11
    Dernier message: 19/05/2006, 22h23
  4. [POO] objet file
    Par christel1982 dans le forum Général JavaScript
    Réponses: 11
    Dernier message: 07/02/2006, 15h23
  5. [Open Inventor] Création d'un objet FILE
    Par seiryujay dans le forum Entrée/Sortie
    Réponses: 7
    Dernier message: 16/03/2005, 18h29

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