仅列出目录中的文件
我有一个具有以下结构的文件夹
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