2013-05-06 4 views
10

У меня есть папка со следующей структуройЛистинг только файлы в каталоге

C:/rootDir/ 

rootDir has following files 

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

Я заинтересован только в XML-файлы внутри ROOTDIR. Потому что если я использую JDOM для чтения XML следующий код также рассматривает файлы внутри «testDirectory» и выплевывает «содержание не допускается исключение»

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

, как можно исключить подкаталог во время использования метода listFiles? Будет ли работать следующий код?

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

* «Будет ли работать следующий код?» * Что произошло, когда вы его попробовали? –

+0

Я не мог попробовать сейчас, потому что мой JDK был удален по некоторым причинам, и у меня нет прав администратора для его установки. :(Я знаю, что это хрома .. – user1669488

+1

жаль, что @AndrewThompson. Я буду помнить об этом.;) – user1669488

ответ

13

Используйте FileFilter вместо этого, так как это даст доступ к реальному файлу, а затем включать в себя проверку на 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

Спасибо. это сработало! – user1669488

+0

Неплохой фрагмент непроверенного кода: P – MadProgrammer

9

Легче, чтобы понять, что File объект имеет isDirectory метод, который казалось бы, как если бы она была написана, чтобы ответить на этот самый вопрос:

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

В чем проблема с вышеуказанным кодом. Вы можете использовать это для записи файлов, исключая подпапки.

FileFilter также делает то же самое, но он будет использоваться, когда имя файла не является достаточным для перечисления файлов. Если вы хотите перечислить все скрытые файлы или файл только для чтения и т. д., вы можете использовать FilteFilter

Смежные вопросы