it-swarm.com.de

Wie liste ich die Dateien im aktuellen Verzeichnis auf?

Ich möchte die Dateien im aktuellen Verzeichnis auflisten können. Ich habe etwas gemacht, das funktionieren sollte, aber nicht alle Dateinamen zurückgibt.

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

Es gibt zwar .classpath zurück, aber ich bin mir ziemlich sicher, dass ich andere Java-Dateien in diesem Ordner habe. Möglicherweise stimmt die Punktnotation für den aktuellen Ordner nicht?

25
Martynogea

Möglicherweise stimmt die Punktnotation für den aktuellen Ordner nicht?

Drucken Sie das Ergebnis von File.getCanonicalFile() , um den Pfad zu überprüfen. 

Kann mir jemand erklären, warum src nicht der aktuelle Ordner ist? 

Ihre IDE legt den Klassenpfad beim Aufrufen der JVM fest.

Z.B. (greift nach Netbeans) Wenn Sie Menüs auswählen, File | Project Properties (all classes) Sie könnten etwas ähnliches sehen:

Netbeans project options

Hier ist der Working Directory von Interesse.

9
Andrew Thompson

Versuchen Sie dies, um alle Dateien in Ordner und Unterordner abzurufen

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());
            }
        }

    }

Nur Dateien/Ordner abrufen

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

Sie sollten sich vergewissern, dass new File(".") wirklich auf den Punkt verweist, von dem Sie meinen, dass er darauf verweist - .classpath schlägt den Stamm eines Eclipse-Projekts vor.

3
Gyro Gearless

Hatte einen schnellen Schnupfen für dieses, aber das sieht aus, als sollte es funktionieren. Ich habe es aber noch nicht getestet.

    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

Es ist nichts falsch mit Ihrem Code. Es sollte alle Dateien und Verzeichnisse auflisten, die direkt im angegebenen Verzeichnis enthalten sind.

Das Problem ist höchstwahrscheinlich eines der folgenden:

  • Das "."-Verzeichnis ist nicht das, was Sie erwarten. Der "."-Pfadname bedeutet eigentlich das "aktuelle Verzeichnis" oder "Arbeitsverzeichnis" für die JVM. Sie können das aktuelle Verzeichnis "." überprüfen, indem Sie dir.getCanonicalPath() ausgeben.

  • Sie missverstehen, was dir.listFiles() zurückgibt. Es werden nicht alle Objekte im Baum unter dir zurückgegeben. Es werden nur Objekte (Dateien, Verzeichnisse, Symlinks usw.) zurückgegeben, die direkt in dir sind.

Die Datei ".classpath" legt nahe, dass Sie sich ein Eclipse-Projektverzeichnis ansehen. Eclipse-Projekte sind normalerweise mit den Java-Dateien in einem Unterverzeichnis wie "./src" konfiguriert. Ich würde nicht erwarten, dass Java-Quellcode im Verzeichnis "." angezeigt wird.


Kann mir jemand erklären, warum src nicht der aktuelle Ordner ist? "

Angenommen, Sie starten eine Anwendung in Eclipse und dann den aktuellen Ordner defaults im Projektverzeichnis. Sie können das aktuelle Standardverzeichnis über eine der Anzeigen im Launcher-Konfigurationsassistenten ändern.

1
Stephen C

Ihr Code liefert das erwartete Ergebnis, wenn Sie den Code eigenständig (von der Befehlszeile) kompilieren und ausführen. Wie in Eclipse für jedes Projekt standardmäßig das Projektverzeichnis, so erhalten Sie dieses Ergebnis.

Sie können die user.dir -Eigenschaft in Java folgendermaßen einstellen:

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

dann wird es das erwartete Ergebnis geben.

0
avinesh

Ich habe diese Antwort mit meinem lokalen Verzeichnis verwendet (zum Beispiel E://). Es funktioniert gut für das erste Verzeichnis und für das seconde-Verzeichnis machte die Ausgabe eine Java-Nullzeiger-Ausnahme. Nachdem ich nach dem Grund gesucht habe, stelle ich fest, dass das Problem durch das verborgene verursacht wurde Verzeichnis, und dieses Verzeichnis wurde von Windows erstellt Um dieses Problem zu vermeiden, verwenden Sie einfach dieses 

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