首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >FileNameFilter和FileFilter的使用

FileNameFilter和FileFilter的使用
EN

Stack Overflow用户
提问于 2011-11-30 14:02:52
回答 1查看 9K关注 0票数 5

我正在编写一个简单的程序,以递归的方式列出目录中的文件.class。

最初,我编写了以下代码:

代码语言:javascript
运行
复制
public class Parsing{

    public static void main(String[] args) {
        File f=new  File(".\\");
        readRecursive(f);
    }

    private static void readRecursive(File f) {
        String[] files=f.list(  new FilterByteCode());
        if(null==files){
            files=new String[0];
        }
        for(String curr: files){
            File currFile=new File(curr);
            System.out.println(currFile.getName());
            readRecursive(currFile);
        }
    }
}//end parsing

class FilterByteCode implements FilenameFilter {


    @Override
    public boolean accept(File dir, String name) {
        if(name.endsWith(".class")){
            return acceptByteCode(dir);
        }else{
            return  (null!=dir && dir.exists() && dir.isDirectory());
        }

    }

        private boolean acceptByteCode(File dir) {
            boolean res= (null!=dir && dir.exists() && dir.isFile());
            return res;
        }

}//FilterByteCode 

但是这个列表只是目录和子目录,而不是文件!

我使用FileFilter解决了问题:

代码语言:javascript
运行
复制
private static void readRecursiveFile(File f) {
        File[] files=f.listFiles(new FilterByteCode2());
        if(null==files){
            files=new File[0];
        }
        for(File curr: files){
            System.out.println(curr.getName());
            readRecursiveFile(curr);
        }
    }

class FilterByteCode2 implements FileFilter {

    @Override
    public boolean accept(File pathname) {
        if(null!=pathname && pathname.getName().endsWith(".class")){
            return  acceptByteCode(pathname);
        }else{
            return (null!=pathname && pathname.exists() && pathname.isDirectory());
        }
    }//accept

    private boolean acceptByteCode(File dir) {
        boolean res = (null != dir && dir.exists() && dir.isFile());
        return res;
    }

}//FilterByteCode2

而这项工作,列出了文件.class。

我阅读了FilenameFilterFileFilter之间的区别,但我没有发现行为差异的原因。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-11-30 14:06:36

dir参数在FilenameFilter#accept()中表示文件所在的父目录,而不是您所期望的文件本身。因此,除其他外,dir.isFile()将始终在FilenameFilter方法中返回false,这使得acceptByteCode()总是返回false

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8327131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档