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

时间:2013-08-04 12:46:07

标签: java arrays file linked-list

我有一个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"};

我该如何继续实施?

4 个答案:

答案 0 :(得分:1)

你可以使用这样的东西

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 :(得分:0)

  1. 获取文件列表并检查其名称是否以file_ext的任何转发结尾,如果是,请将其添加到filesToDelete
  2. 列表中
  3. filesToDelete列表中删除文件。

答案 2 :(得分:0)

使用FilenameFilter,可以找到一个示例here

答案 3 :(得分:0)

使用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);
    }
})));