14 votes

File.list() vs File.listFiles()

Ma question est : si ces deux fonctions ont quelque chose de différent ? Je veux dire que je sais qu'elles renvoient quelque chose de différent, mais est-il possible que le nombre d'éléments dans l'une soit différent de celui de l'autre ? Je vais essayer d'expliquer. J'ai implémenté TreeModel pour l'une de mes classes en essayant de créer une belle vue sur les fichiers sur le PC en me basant sur JTree. Voici une partie de celui-ci :

public Object getChild(Object parent, int index) {
        File[] children = ((File) parent).listFiles();
        if(children == null || index < 0 || index >= children.length) {
            return null;
        }

        File result = new MyFile(children[index]);
        return result;
}

public int getChildCount(Object parent) {
        //---
        //String[] children = ((File)parent).list();
        File[] children = ((File)parent).listFiles();
        //---

        if(children == null) {
            return 0;
        }
        return children.length;
}

J'ai marqué le code intéressant. Si je change ces deux lignes pour celles commentées, parfois j'obtiens une NullPointerException après le chargement de TreeModel : jtree.setModel(treeModel);. Celle commentée ne pose aucun problème. J'ai vérifié la documentation et elle ne mentionne rien d'inhabituel, y compris le fait de renvoyer null par les deux méthodes. Que se passe-t-il ici ?

9voto

D.R. Points 3411

Les deux méthodes font essentiellement la même chose, consultez http://www.docjar.com/html/api/java/io/File.java.html pour plus de détails.

2voto

xxxvodnikxxx Points 956

Comme déjà indiqué, mais précisé uniquement dans les commentaires de post de D.R

  • list méthode renvoie un tableau de chaînes de caractères avec les noms de fichiers (fichiers et répertoires)

  • listFiles renvoie un tableau de la classe File de la même

Voir les pages de documentation, par exemple https://docs.oracle.com/javase/7/docs/api/java/io/File.html

String[] list() Renvoie un tableau de chaînes de caractères contenant les noms des fichiers et des répertoires du répertoire désigné par ce nom de chemin abstrait.

File[] listFiles() Renvoie un tableau de noms de chemin abstrait désignant les fichiers du répertoire désigné par ce nom de chemin abstrait.

Je ne suis pas sûr pourquoi les deux méthodes existent, probablement le tableau de chaînes de caractères sera plus rapide et moins gourmand en mémoire que celui de tableaux de classe File

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X