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 :

File listFiles ou List


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 255
    Par défaut File listFiles ou List
    Salut à tous,

    Est-il possible de limiter un listFiles à un certain nombre.

    J'ai un répertoire très volumineux et je souhaite que le listFiles ne remonte pas tous mes fichiers mais un nombre défini.

    Est-ce possible ?

    Merci

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Tu peux utiliser les FilenameFilter pour cela :
    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
    class CountFilter implements FilenameFilter {
        private final int max;
        private int count;
     
        public CountFilter(int max) {
            this.count = 0;
            this.max = max;
        }
     
        public boolean accept(File dir, String name) {
            if (count<max) {
                count++;
                return true;
            }
            return false;
        }
    }
    Que tu utilises comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File[] files = dir.listFiles(new CountFilter(20));
    a++

  3. #3
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Mais si c'est juste un problème de performances, ça ne va rien changer, ça va tout parcourir, c'est juste que ça ne va pas ajouter à partir d'un certain nombre...

  4. #4
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    t'es sur de ça ??

  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
    Citation Envoyé par iohack
    t'es sur de ça ??
    Je suis plutôt d'accord avec ®om, car la méthode accept() est appelée pour chaque fichier afin de vérifier si celui-ci correspond ou non au filtre spécifié (le fait que la méthode accept() renvoie false n'arrête en aucune manière le "listage" des fichiers).
    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 Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Dans le fond, effectivement ça parait logique. D'ailleurs je vois pas trop comment contourner la chose.

  7. #7
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par iohack
    Dans le fond, effectivement ça parait logique. D'ailleurs je vois pas trop comment contourner la chose.
    Je crois que tu ne peux pas contourner... car voici le code source:

    Dans la classe File...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public String[] list() {
    	SecurityManager security = System.getSecurityManager();
    	if (security != null) {
    	    security.checkRead(path);
    	}
    	return fs.list(this);
        }
    Ce fs est déclaré comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        static private FileSystem fs = FileSystem.getFileSystem();
    Et dans la classe abstraite ayant une visibilité de package FileSystem, la méthode correspondante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        public static native FileSystem getFileSystem();
    C'est du natif... Donc pour changer de comportement, faudrait programmer en C

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 255
    Par défaut
    Merci pour votre réponse et pour ce petit "débat"

    Effectivement, je traite le contenu d'un répertoire qui contient... 800.000 fichiers !!!!

    Donc je souhaite déjà traiter les fichiers 10.000 par 10.000 dans un premier temps !!!

    Qu'en pensez-vous ?

  9. #9
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par the java lover
    Merci pour votre réponse et pour ce petit "débat"

    Effectivement, je traite le contenu d'un répertoire qui contient... 800.000 fichiers !!!!

    Donc je souhaite déjà traiter les fichiers 10.000 par 10.000 dans un premier temps !!!

    Qu'en pensez-vous ?
    Qu'appelles-tu "traiter" les fichiers?

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 255
    Par défaut
    Je récupère les fichiers dans un tableau avec le listeFiles et je lis le contenu des fichiers...

  11. #11
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par the java lover
    Je récupère les fichiers dans un tableau avec le listeFiles et je lis le contenu des fichiers...
    Si tu dois traiter tous les fichiers, tu peux utiliser le FilenameFilter pour tes traitements.

    En effet si tu dois lire tous les fichiers le plus coûteux ne doit pas venir du parcours des fichiers, mais de la création du tableau de 800000 Files...

    Or si tu utilises un FilenameFilter qui renvoit toujours false tu t'évites la création de ce gros tableau, mais comme la méthode est appellé pour tous les fichiers tu peux y placer ton traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
            dir.listFiles(new FilenameFilter() {
                public boolean accept(File dir, String name) {
     
                    // Traitement sur le fichier courant :
                    System.out.println("Traitement de " + new File(dir, name) );
     
                    // Toujours retourner false
                    return false;
                }
            });
    a++

  12. #12
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 255
    Par défaut
    J'ai essayé le CountFilter mais il me sort une exception OutOfMemory à chaque exécution.

    Des idées ?

  13. #13
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par the java lover
    J'ai essayé le CountFilter mais il me sort une exception OutOfMemory à chaque exécution.
    Avec combien de fichier ? Tu as essayé de réduire le nombre ? Tu as essayé ma seconde solution ?

    a++

  14. #14
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 255
    Par défaut
    Salut,

    800.000 fichiers dans le répertoire...

    Le problème est que je ne peux pas réduire ce nombre car Windows (ou DOS) est en rade quand j'ouvre le répertoire !!!

    Aurais-tu une solution ?

  15. #15
    Membre éclairé
    Profil pro
    Inscrit en
    Août 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 255
    Par défaut
    Et comme tu me le disais, même en utilisant un filtre, il parcourt quand même tout d'où le pb de mémoire !!!

    Même avec le FileNameFilter il parcourt tout ?

  16. #16
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par the java lover
    Même avec le FileNameFilter il parcourt tout ?
    Oui il parcourt tout mais si tu renvoit false il n'ajoute pas le fichier dans le tableau et donc "devrait" consommer moins de mémoire...

    Maintenant si tu as ce problème là même au niveau système cela peut bloquer au niveau du code natif : essayes de tracer dans le FilenemFilter pour voir si tu passes dedans ou si ca plante avant...

    a++

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    As-tu essayé simplement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String[] tab = fichier.list();
    si tu arrives à exécuter cette instruction, tout est possible

  18. #18
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut
    Et pourquoi avoir 800 000 fichiers dans un seul réperoire ?
    Moi rien que là je me dis qu'il y a un problème....

  19. #19
    Membre Expert
    Avatar de ®om
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 815
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 815
    Par défaut
    Citation Envoyé par Scorpyosis
    Et pourquoi avoir 800 000 fichiers dans un seul réperoire ?
    Moi rien que là je me dis qu'il y a un problème....
    Lol, c'est vrai que c'est étonnant...

  20. #20
    Membre expérimenté
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    194
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 194
    Par défaut
    Si tu peux déplacer le répertoire problématique, tu pourrais le mettre directement sous la racine du disque dur, tu gagnerais pas mal d'espace lors de ta requête fichier.list(), si le problème vient de là.

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/04/2008, 18h30
  2. <welcome-file-list> problème MAJ variable
    Par rock'roll dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/05/2007, 17h23
  3. Sources.list et files
    Par Jean_Benoit dans le forum Debian
    Réponses: 4
    Dernier message: 28/03/2007, 12h39
  4. list : no such file or directory :(
    Par Bakura dans le forum C++
    Réponses: 23
    Dernier message: 13/06/2006, 17h30
  5. Réponses: 2
    Dernier message: 16/12/2005, 18h47

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