2013-05-06 33 views
10

Tôi có một thư mục với sau cấu trúcBảng liệt kê những file trong thư mục

C:/rootDir/ 

rootDir has following files 

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

Tôi chỉ quan tâm đến xml tập tin bên trong rootDir. Cuz Nếu tôi sử dụng JDOM để đọc XML đoạn mã sau cũng sẽ xem xét các tập tin bên trong "testDirectory" và spits ra "nội dung không được phép ngoại lệ"

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

làm thế nào tôi có thể loại trừ các thư mục con trong khi sử dụng phương pháp listFiles? Mã sau có hoạt động không?

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

* "Mã sau có hoạt động không?" * Điều gì đã xảy ra khi bạn thử? –

+0

Tôi không thể thử ngay bây giờ vì đã cài đặt JDK vì một số lý do và tôi không có quyền quản trị để cài đặt nó. :(Tôi biết nó là què .. – user1669488

+1

xin lỗi về điều đó @AndrewThompson. Tôi sẽ giữ cho rằng trong tâm trí ..;) – user1669488

Trả lời

13

Sử dụng một FileFilter thay vào đó, vì nó sẽ cung cấp cho bạn truy cập vào các tập tin thực tế, sau đó bao gồm một tấm séc cho 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

Cảm ơn. điều này đã làm việc! – user1669488

+0

Không tệ của một đoạn mã không được kiểm tra: P – MadProgrammer

9

dễ dàng hơn là để nhận ra rằng đối tượng File có một phương pháp isDirectory, trong đó sẽ có vẻ như thể nó được viết để trả lời câu hỏi rất này:

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

Sự cố với mã ở trên là gì. Bạn có thể sử dụng tệp này để liệt kê các tệp bằng cách loại trừ các thư mục con.

FileFilter cũng thực hiện tương tự nhưng nó sẽ được sử dụng khi tên tệp không đủ để liệt kê các tệp. tức là nếu bạn muốn liệt kê tất cả các tệp ẩn hoặc tệp chỉ đọc, v.v. bạn có thể sử dụng FilteFilter

Các vấn đề liên quan