为了账号安全,请及时绑定邮箱和手机立即绑定

将File.listFiles与FileNameExtensionFilter一起使用

将File.listFiles与FileNameExtensionFilter一起使用

catspeake 2019-12-15 16:12:11
我想在目录中获取具有特定扩展名的文件列表。在API(Java 6)中,我看到了File.listFiles(FileFilter)可以做到这一点的方法。由于我需要特定的扩展名,因此我创建了一个FileNameExtensionFilter。但是,当我listFiles与此一起使用时,出现编译错误。我认为自以来FileNameExtensionFilter implements FileFilter,我应该能够做到这一点。代码如下:FileNameExtensionFilter filter = new FileNameExtensionFilter("text only","txt");String dir  = "/users/blah/dirname";File f[] = (new File(dir)).listFiles(filter);最后一行显示编译错误:File类型的方法listFiles(FileNameFilter)不适用于FileNameExtensionFilter类型的参数我正在尝试使用listFiles(FileFilter),不是listFiles(FileNameFilter)。为何编译器无法识别这一点?如果我编写自己的扩展过滤器extend,则此方法有效FileFilter。我宁愿用而不愿FileNameExtensionFilter自己写。我究竟做错了什么?
查看完整描述

3 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

在FileNameExtensionFilter类用于摇摆的使用JFileChooser。


尝试使用FilenameFilter代替。例如:


File dir = new File("/users/blah/dirname");

File[] files = dir.listFiles(new FilenameFilter() {

    public boolean accept(File dir, String name) {

        return name.toLowerCase().endsWith(".txt");

    }

});



查看完整回答
反对 回复 2019-12-16
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

您要使用某个特定原因FileNameExtensionFilter吗?我知道这有用。


private File[] getNewTextFiles() {

    return dir.listFiles(new FilenameFilter() {

        @Override

        public boolean accept(File dir, String name) {

            return name.toLowerCase().endsWith(".txt");

        }

    });

}



查看完整回答
反对 回复 2019-12-16
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

这是我很快制作的,它的性能应该比File.getName()。endsWith(“。xxxx”);好得多。


import java.io.File;

import java.io.FileFilter;


public class ExtensionsFilter implements FileFilter 

{

    private char[][] extensions;


    private ExtensionsFilter(String[] extensions)

    {

        int length = extensions.length;

        this.extensions = new char[length][];

        for (String s : extensions)

        {

            this.extensions[--length] = s.toCharArray();

        }

    }


    @Override

    public boolean accept(File file)

    {

        char[] path = file.getPath().toCharArray();

        for (char[] extension : extensions)

        {

            if (extension.length > path.length)

            {

                continue;

            }

            int pStart = path.length - 1;

            int eStart = extension.length - 1;

            boolean success = true;

            for (int i = 0; i <= eStart; i++)

            {

                if ((path[pStart - i] | 0x20) != (extension[eStart - i] | 0x20))

                {

                    success = false;

                    break;

                }

            }

            if (success)

                return true;

        }

        return false;

    }

}

这是各种图像格式的示例。


private static final ExtensionsFilter IMAGE_FILTER = 

      new ExtensionsFilter(new String[] {".png", ".jpg", ".bmp"});



查看完整回答
反对 回复 2019-12-16
  • 3 回答
  • 0 关注
  • 259 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信