仅列出目录中的文件

我有一个具有以下结构的文件夹

C:/rootDir/ rootDir has following files test1.xml test2.xml test3.xml testDirectory <------- This is a subdirectory inside rootDir 

我只对rootDir中的xml文件感兴趣。 Cuz如果我使用JDOM读取XML,下面的代码也会考虑“testDirectory”中的文件并吐出“内容不允许exception”

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

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

更容易意识到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 } } 
 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