从允许扩展名数组中出现的文件的LinkedList中删除



我有一个文件的LinkedList,我使用以下行填充:

File file = new File(directoryPath);
List<File> filesList = new LinkedList<File>(Arrays.asList(file.listFiles()));

这将获取给定directoryPath字符串中的所有文件。

然后,我有一个允许的文件扩展名数组,并希望删除里面不匹配的任何文件(而不是目录)。

String[] file_ext = new String[] {"ext1", "ext2", "ext3"};

我该如何着手实施?

您可以使用类似的东西

final String[]  file_ext = new String[] {"ext1", "ext2", "ext3"};
FilenameFilter filter = new FilenameFilter() {
    @Override
    public boolean accept(File dir, String name) {
            for(int i=file_ext.length-1;i>=0;i--)
                if( name.endsWith( "." + file_ext[i]) )
                    return true;
            return false;
        }
    };
File file = new File(directoryPath);
List<File> filesList = new LinkedList<File>(Arrays.asList(file.listFiles(filter)));

更新:根据"Borsi the Spider"注释,为了避免files.notext1等错误匹配,搜索将匹配.字符以及

  1. 获取文件列表,检查它们的名称是否以file_ext中的任何文本结尾,如果是,则将它们添加到filesToDelete列表中
  2. filesToDelete列表中删除文件

使用文件名过滤器,可以在

中找到一个示例

使用FileNameExtensionFilter

final FileNameExtensionFilter fnef = new FileNameExtensionFilter("", "ext1", "ext2", "ext3");
final List<File> files = new LinkedList<>();
for(final File f : new File(directoryPath).listFiles()) {
    if(fnef.accept(f)) files.add(f);
}

这是来自Swing的,但它正是你想要的,它对EDT没有任何依赖性或任何奇怪的东西。

你甚至可以把FileNameExtensionFilter包裹在FileFilter的外墙上,使其成为一个内衬:

final List<File> filesList = new LinkedList<>(Arrays.asList(new File(directoryPath).listFiles(new FileFilter() {
    final FileNameExtensionFilter fnef = new FileNameExtensionFilter("", "ext1", "ext2", "ext3");
    @Override
    public boolean accept(File pathname) {
        return fnef.accept(pathname);
    }
})));

相关内容

  • 没有找到相关文章

最新更新