Comment lister les fichiers dans le répertoire courant?

Je veux pouvoir lister les fichiers dans le répertoire courant. J'ai fait quelque chose qui devrait fonctionner mais ne retourne pas tous les noms de fichiers.

File dir = new File(".");
File[] filesList = dir.listFiles();
for (File file : filesList) {
    if (file.isFile()) {
        System.out.println(file.getName());
    }
}

Il renvoie .classpath, mais je suis sûr que j'ai d'autres fichiers java dans ce dossier. Peut-être que la notation par points pour le dossier actuel est incorrecte?

23
demandé sur Subhrajyoti Majumder 2013-03-18 20:54:47

7 réponses

Peut-être que la notation par points pour le dossier actuel est incorrecte?

Imprimer le résultat de File.getCanonicalFile() pour vérifier le chemin d'accès.

Quelqu'un peut-il m'expliquer pourquoi src n'est pas le dossier actuel?

Votre IDE définit le chemin de classe lors de l'appel de la JVM.

Par exemple (atteint pour Netbeans) si vous sélectionnez menus File | Project Properties (all classes) vous pourriez voir quelque chose de similaire à:

Options du projet Netbeans

C'est le Working Directory qui est d'intérêt ici.

9
répondu Andrew Thompson 2013-03-18 18:13:31

Essayez ceci, pour récupérer tous les fichiers dans le dossier et le sous-dossier

public static void main(String[]args)
    {
        File curDir = new File(".");
        getAllFiles(curDir);
    }
    private static void getAllFiles(File curDir) {

        File[] filesList = curDir.listFiles();
        for(File f : filesList){
            if(f.isDirectory())
                getAllFiles(f);
            if(f.isFile()){
                System.out.println(f.getName());
            }
        }

    }

Pour récupérer des fichiers / dossiers uniquement

public static void main(String[]args)
    {
        File curDir = new File(".");
        getAllFiles(curDir);
    }
    private static void getAllFiles(File curDir) {

        File[] filesList = curDir.listFiles();
        for(File f : filesList){
            if(f.isDirectory())
                System.out.println(f.getName());
            if(f.isFile()){
                System.out.println(f.getName());
            }
        }

    }
21
répondu Sach 2016-05-10 13:19:29

Vous devriez vérifier que new File(".") pointe vraiment vers l'endroit où vous pensez qu'il pointe - .classpath suggère la racine d'un projet Eclipse....

3
répondu Gyro Gearless 2013-03-18 17:02:51

Avait un rapide fouineur pour celui-ci, mais cela semble que cela devrait fonctionner. Je n'ai pas encore testé si.

    File f = new File("."); // current directory

    File[] files = f.listFiles();
    for (File file : files) {
        if (file.isDirectory()) {
            System.out.print("directory:");
        } else {
            System.out.print("     file:");
        }
        System.out.println(file.getCanonicalPath());
    }
2
répondu Crispy91 2013-03-18 17:00:46

Il n'y a rien de mal avec votre code. Il devrait lister tous les fichiers et répertoires directement contenus par le répertoire nommé.

Le problème est probablement l'un des suivants:

  • Le répertoire "." n'est pas ce que vous attendez. Le chemin "." signifie en fait le "répertoire courant" ou le "répertoire de travail" de la JVM. Vous pouvez vérifier le répertoire {[0] } en imprimant dir.getCanonicalPath().

  • Tu l'es malentendu ce que dir.listFiles() retourne. Il ne retourne pas tous les objets de l'arborescence sous dir. Il retourne uniquement des objets (fichiers, répertoires, liens symboliques, etc) qui sont directement dans dir.

Le fichier ".classpath" suggère que vous regardez un répertoire de projet Eclipse, et les projets Eclipse sont normalement configurés avec les fichiers Java dans un sous-répertoire tel que "./src". Je ne m'attendrais pas à voir un code source Java dans le "." répertoire.


Quelqu'un peut-il m'expliquer pourquoi src n'est pas le dossier actuel?"

En supposant que vous lancez une application dans Eclipse, le dossier actuel par défaut dans le répertoire du projet. Vous pouvez modifier le répertoire courant par défaut via l'un des panneaux de L'assistant de configuration du lanceur.

1
répondu Stephen C 2013-03-18 17:18:43

Votre code donne le résultat attendu, si vous compilez et exécutez votre code autonome (à partir de la ligne de commande). Comme dans eclipse pour chaque projet par défaut, le répertoire de travail est le répertoire de projet, c'est pourquoi vous obtenez ce résultat.

, Vous pouvez définir l'utilisateur.propriété dir en java comme:

   System.setProperty("user.dir", "absolute path of src folder");

Ensuite, il donnera le résultat attendu.

0
répondu avinesh 2013-03-18 17:21:31

J'ai utilisé cette réponse avec mon répertoire local ( par exemple E:// ) cela fonctionne bien pour le premier répertoire et pour le deuxième répertoire la sortie a fait une exception de pointeur NULL java, après avoir cherché la raison pour laquelle je découvre que le problème a été créé par le répertoire caché, et ce répertoire a été créé par windows pour éviter ce problème, utilisez simplement ceci

public void recursiveSearch(File file ) {
 File[] filesList = file.listFiles();
    for (File f : filesList) {
        if (f.isDirectory() && !f.isHidden()) {
            System.out.println("Directoy name is  -------------->" + f.getName());
            recursiveSearch(f);
        }
        if( f.isFile() ){
            System.out.println("File name is  -------------->" + f.getName());
        }
    }
}
0
répondu Yagami Light 2016-12-11 14:19:39