2013-05-06 11 views
10

Ich habe einen Ordner mit Struktur folgendenEintrag nur Dateien im Verzeichnis

C:/rootDir/ 

rootDir has following files 

test1.xml 
test2.xml 
test3.xml 
testDirectory <------- This is a subdirectory inside rootDir 

Ich bin nur in der XML-Dateien innerhalb RootDir interessiert. Cuz Wenn ich JDOM die XML der folgende Code auch berücksichtigt die Dateien in „Testdirectory“ und spuckt „Inhalt nicht erlaubt Ausnahme“

File testDirectory = new File("C://rootDir//"); 
File[] files = testDirectory.listFiles(); 

wie kann ich ausschließen, das Unterverzeichnis bei der Verwendung von Listfiles Methode zu lesen? Wird der folgende Code funktionieren?

File testDirectory = new File("C://rootDir//"); 
File[] files = testDirectory.listFiles(new FilenameFilter() { 

    @Override 
    public boolean accept(File dir, String name) { 
     return name.toLowerCase().endsWith(".xml"); 
    } 
}); 
+2

* "Funktioniert der folgende Code?" * Was ist passiert, als Sie es versucht haben? –

+0

Ich konnte es jetzt nicht versuchen, weil mein JDK aus bestimmten Gründen deinstalliert wurde und ich keine Administratorrechte habe, es zu installieren. :(Ich weiß, es ist lahm .. – user1669488

+1

Entschuldigung, dass @AndrewThompson. Ich werde das im Hinterkopf behalten ..;) – user1669488

Antwort

13

Verwenden Sie ein FileFilter statt, da es geben Sie Zugriff auf die eigentliche Datei, dann einen Scheck für File#isFile

File testDirectory = new File("C://rootDir//"); 
File[] files = testDirectory.listFiles(new FileFilter() { 
    @Override 
    public boolean accept(File pathname) { 
     String name = pathname.getName().toLowerCase(); 
     return name.endsWith(".xml") && pathname.isFile(); 
    } 
}); 
+0

Danke. das hat funktioniert! – user1669488

+0

Nicht schlecht von einem Stück ungeprüften Code: P – MadProgrammer

9

einfacher ist zu erkennen, dass das File Objekt eine isDirectory Methode hat, die, als ob es diese Frage zu beantworten, wurde geschrieben scheinen würde:

File testDirectory = new File("C://rootDir//"); 
File[] files = testDirectory.listFiles(); 
for (File file : files) { 
    if ((file.isDirectory() == false) && (file.getAbsolutePath().endsWith(".xml")) { 
     // do what you want 
    } 
} 
0
File testDirectory = new File("C://rootDir//"); 
File[] files = testDirectory.listFiles(new FilenameFilter() 
{ 

    @Override 
    public boolean accept(File dir, String name) { 
     return name.toLowerCase().endsWith(".xml"); 
    }}); 
012 umfassen

Was ist das Problem mit dem obigen Code? Sie können dies zum Auflisten von Dateien verwenden, indem Sie Unterordner ausschließen.

FileFilter tun auch die gleiche Sache, aber es wird verwendet, wenn der Dateiname nicht ausreicht, um die Dateien aufzulisten. Wenn Sie alle versteckten Dateien oder Readonly-Dateien usw. auflisten möchten, können Sie FilteFilter verwenden

Verwandte Themen