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?
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 à:
C'est le Working Directory
qui est d'intérêt ici.
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());
}
}
}
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....
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());
}
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 imprimantdir.getCanonicalPath()
.Tu l'es malentendu ce que
dir.listFiles()
retourne. Il ne retourne pas tous les objets de l'arborescence sousdir
. Il retourne uniquement des objets (fichiers, répertoires, liens symboliques, etc) qui sont directement dansdir
.
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.
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.
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());
}
}
}