我正在使用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
)。
答案 0 :(得分:1)
文档says,ResourceArrayPropertyEditor
默认使用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()
。