web-dev-qa-db-fra.com

Comment lister les fichiers dans le répertoire actuel?

Je veux pouvoir lister les fichiers dans le répertoire actuel. J'ai créé quelque chose qui devrait fonctionner mais ne renvoie 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 d’autres fichiers Java se trouvent dans ce dossier. Peut-être que la notation par points du dossier actuel est incorrecte?

25
Martynogea

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

Imprimez le résultat de File.getCanonicalFile() pour vérifier le chemin. 

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 machine virtuelle Java.

PAR EXEMPLE. (atteint Netbeans) Si vous sélectionnez les menus File | Project Properties (all classes) vous pourriez voir quelque chose de similaire à:

Netbeans project options

C'est le Working Directory qui nous intéresse ici.

9
Andrew Thompson

Essayez ceci, pour récupérer tous les fichiers du dossier et du 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());
            }
        }

    }
22
Sach

Vous devriez vérifier que new File(".") pointe vraiment là où vous pensez l’être - .classpath suggère la racine d’un projet Eclipse ....

3
Gyro Gearless

Eu un rapide fouinement pour celui-ci, mais cela semble fonctionner. Je ne l'ai pas encore testé cependant.

    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
Crispy91

Il n'y a rien de mal avec votre code. Il devrait répertorier tous les fichiers et répertoires directement contenus dans le répertoire désigné.

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

  • Le répertoire "." n’est pas ce que vous espériez. Le nom de chemin "." signifie en réalité le "répertoire actuel" ou le "répertoire de travail" de la machine virtuelle Java. Vous pouvez vérifier le répertoire "." en imprimant dir.getCanonicalPath().

  • Vous comprenez mal ce que dir.listFiles() renvoie. Il ne renvoie pas tous les objets de l’arborescence située sous dir. Il ne renvoie que les objets (fichiers, répertoires, liens symboliques, etc.) qui sont directement dans dir.

Le fichier ".classpath" suggère que vous consultiez un répertoire de projet Eclipse. Les projets Eclipse sont normalement configurés avec les fichiers Java d'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 en cours defaults dans le répertoire du projet. Vous pouvez modifier le répertoire actuel par défaut via l’un des panneaux de l’assistant de configuration de Launcher.

1
Stephen C

Votre code donne le résultat attendu si vous compilez et exécutez votre code de manière autonome (à partir de la ligne de commande). Comme dans Eclipse pour chaque projet, le répertoire de travail par défaut est le répertoire de projet, raison pour laquelle vous obtenez ce résultat.

Vous pouvez définir la propriété user.dir dans Java comme suit:

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

alors cela donnera le résultat attendu.

0
avinesh

J'ai utilisé cette réponse avec mon répertoire local (par exemple E://). Cela fonctionne correctement pour le premier répertoire et pour le répertoire seconde, la sortie est devenue une exception Java null pointer, après avoir recherché la raison pour laquelle j'ai découvert que le problème avait été créé par la commande hidden répertoire, et ce répertoire a été créé par windows pour éviter ce problème, utilisez simplement 

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
Yagami Light