Java 仅列出目录中的文件

Java 仅列出目录中的文件,java,file,directory,Java,File,Directory,我有一个具有以下结构的文件夹 C:/rootDir/ rootDir has following files test1.xml test2.xml test3.xml testDirectory <------- This is a subdirectory inside rootDir 使用listFiles方法时,如何排除子目录?下面的代码可以工作吗 File testDirectory = new File("C://rootDir//"); File[]

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

C:/rootDir/

rootDir has following files

test1.xml
test2.xml
test3.xml
testDirectory <------- This is a subdirectory inside rootDir
使用
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");
    }
});

更容易认识到对象有一个方法,它似乎是为了回答这个问题而写的:

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
    }
}
改为使用,因为它将允许您访问实际文件,然后包括检查

上面的代码有什么问题。您可以通过排除子文件夹来使用此选项列出文件


FileFilter也做同样的事情,但当文件名不足以列出文件时,将使用它。i、 e如果您想列出所有隐藏文件或只读文件等。您可以使用FilteFilter

“以下代码有效吗?”尝试时发生了什么?我现在无法尝试,因为我的JDK由于某些原因已卸载,并且我没有管理员权限安装它:(我知道这很蹩脚。@AndrewThompson,很抱歉。我会记住这一点。;)一段未经检查的代码不错:网络文件系统(NFS或Samba)路径名的大小写。isFile()很可能会为每个文件创建一个远程请求。@30thh是的,并且@mad程序员每个请求都要花费时间。请求的数量可能是有限的(甚至是计费的)资源。例如,AWS弹性文件系统有每秒7000个请求的硬限制。@30thh有什么替代方案?
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 FileFilter() {
    @Override
    public boolean accept(File pathname) {
        String name = pathname.getName().toLowerCase();
        return name.endsWith(".xml") && pathname.isFile();
    }
});
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");
    }});