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?
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:
Hier ist der Working Directory
von Interesse.
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());
}
}
}
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.
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());
}
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.
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.
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());
}
}
}