目錄

2013-05-06 45 views
10

清單文件只有我有一個文件夾結構如下目錄

C:/rootDir/ 

rootDir has following files 

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

我只是在裏面ROOTDIR的XML文件感興趣。曲子如果我使用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

*「以下代碼是否可以工作?」*當您嘗試時發生了什麼? – 2013-05-06 02:56:45

+0

我現在無法嘗試,因爲我的JDK由於某些原因已被卸載,我沒有管理員權限來安裝它。 :(我知道這是蹩腳的.. – user1669488 2013-05-06 03:00:43

+1

對不起@安德魯·湯普森,我會記住這一點..;) – user1669488 2013-05-06 03:05:28

回答

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 2013-05-06 03:52:48

+0

不錯的一塊未經檢查的代碼:P – MadProgrammer 2013-05-06 03:53:47

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

上述代碼有什麼問題。您可以通過排除子文件夾來使用它來列出文件。

FileFilter也做同樣的事情,但它會用於文件名不足以列出文件。即如果您想要列出所有隱藏文件或只讀文件等,您可以使用FilteFilter