Spring ResourceArrayPropertyEditor:如何只过滤文件?

时间:2016-03-10 09:27:12

标签: spring

我正在使用spring.ios ResourceArrayPropertyEditor来查找与某些模式匹配的所有资源(为了让这个示例更容易,让我们说,我正在寻找foo文件):

我的所作所为:

ResourceArrayPropertyEditor resolver = new ResourceArrayPropertyEditor();
String[] resourcePattern = new String[]{"classpath*:**/*.foo"};
resolver.setValue(resourcePattern);
Resource[] resources = (Resource[]) resolver.getValue();

问题:这不仅会查找我在类路径中的所有“* .foo”文件,还会查找以“foo”结尾的所有包文件夹,例如:“org.mydomain.database.foo”。< / p>

我不需要这些条目,甚至在尝试处理时也会出错。

如何过滤资源以仅包含文件? (比如find . -type f)。

1 个答案:

答案 0 :(得分:1)

文档saysResourceArrayPropertyEditor默认使用PathMatchingResourcePatternResolver来解析特定资源。从PathMatchingResourcePatternResolver的{​​{3}}判断,它将选择与指定模式匹配的所有资源,而不检查目录或文件。

唯一的选择是在获得资源列表后检查isReadable()的{​​{1}}属性。

Resource

或者如果您使用Java 8流:

Resource[] resources = (Resource[]) resolver.getValue();
for(Resource resource : resources){
    if(resource.isReadable()){
        //will work only for files
    }
}

此方法比Resource [] resources = (Resource[]) resolver.getValue(); Resource [] fileResources = Arrays.stream(resources).filter(Resource::isReadable).toArray(Resource[]::new); 更受欢迎,因为无需处理resource.getFile().isDirectory()