2013-05-06 14 views
10

Ho una cartella con seguente strutturaListing solo i file nella directory

C:/rootDir/ 

rootDir has following files 

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

Mi interessa solo in file XML all'interno RootDir. Cuz Se uso JDOM per leggere il XML il seguente codice considera anche i file al suo interno "TestDirectory" e sputa fuori "contenuto non consentito eccezione"

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

come posso escludere la sottodirectory, mentre utilizzando il metodo ListFiles? Funzionerà il seguente codice?

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

* "Il seguente codice funziona?" * Che cosa è successo quando l'hai provato? –

+0

Non posso provarlo ora perché il mio JDK è stato disinstallato per alcuni motivi e non ho i diritti di amministratore per installarlo. :(So che è zoppo .. – user1669488

+1

mi dispiace per questo @AndrewThompson. Lo terrò a mente ..;) – user1669488

risposta

13

Utilizzare un FileFilter invece, in quanto darà accesso al file vero e proprio, quindi includere un assegno di 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

Grazie. questo ha funzionato! – user1669488

+0

Non male di un pezzo di codice non controllato: P – MadProgrammer

9

Più facile è quello di rendersi conto che l'oggetto File ha un metodo isDirectory, che sembrerebbe come se fosse stato scritto per rispondere a questa domanda:

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

Qual è il problema con il codice sopra. È possibile utilizzarlo per elencare i file escludendo le sottocartelle.

FileFilter fa anche la stessa cosa ma verrà utilizzato quando il nome del file non è sufficiente per elencare i file. Se si desidera elencare tutti i file nascosti o file readonly ecc. è possibile utilizzare FilteFilter

Problemi correlati