清单目录文件只有[关闭](Listing only files in directory [clos

2019-09-02 01:01发布

我有以下结构的文件夹

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

Answer 1:

使用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();
    }
});


Answer 2:

更简单的是要认识到, 文件对象有一个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
    }
}


Answer 3:

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做的同样的事情,但是当文件名不sufficent于上市文件将使用它。 也就是说,如果你想列出所有隐藏文件或只读文件等,你可以使用FilteFilter



文章来源: Listing only files in directory [closed]