相对于类路径提取资源

3
我试图从我的类路径中提取某些类型的文件并将其放入临时目录,我希望资源根据其“相对于类路径的路径”进行提取。 我可以使用Spring的PathMatchingResourcePatternResolver检索匹配资源的列表。例如,我正在扫描 classpath*:/xyz/**/*.bar 从类路径中获取,假设在类路径中有一个/xyz/some/dir/foo.bar, 我想将此资源提取到 MY_TEMP_DIR/some/dir/foo.bar. 有没有办法得到这个资源相对于类路径的相对路径,以便我可以相应地构造输出位置?
PathMatchingResourcePatternResolver只返回Resource数组,对于这些Resource,我只能检索资源的URL,但我还想知道这些资源的“根”目录是什么。返回的Resource可能具有不同的“格式”,如jar:file:/some/path/somejar.jar!/xyz/some/dir/foo.barfile:/some/output/directory/xyz/some/dir/foo.bar等。
有人可以给我提示如何实现提取或查找资源的类路径根相对路径吗?
谢谢
编辑:
我不确定是否更好的方法是改变我的问题:
有没有办法知道资源的“相对类路径”是什么? 只需使用我之前的示例,如果我扫描 classpath*:/xyz/**/*.bar ,并获得资源 file:/some/output/directory/xyz/some/dir/foo.bar,有没有办法我可以获得该资源的“相对路径”(/xyz/some/dir/foo.bar)?

我正在尝试从我的类路径中提取某些类型的文件并将其放入临时目录,为什么这样做?它为用户提供了什么功能? - Andrew Thompson
现在我正在使用它来解决我正在使用的一个库的技术缺陷,他们在从类路径获取资源方面表现不佳。我想将捆绑的资源获取到本地目录,并让库从那里读取它。然而,我相信这不是我需要这种功能的唯一情况,在过去的其他情况中,我想从类路径提取资源,但仍要保持其原始“目录”结构。 - Adrian Shum
1个回答

1
你可以使用 PathMatchingResourcePatternResolver.getResources(String pattern) 来获取匹配模式的资源列表,然后解析由 Resource.getURL() 返回的 URL 应该很容易。
它应该看起来像 jar:file://path/to/jar.jar!/path/to/your/resource/foo.bar

如果您已经阅读了我的问题,那么您应该知道我的问题不是关于如何获取资源,而是如何获取其“路径”,以便在提取时可以维护目录结构。解析JAR URL很容易,但是文件呢?假设有一个file:/a/b/c/d/e/Foo.bar,我应该如何知道它是在目录/a/b/c/d下的/e/Foo.bar,还是在/a下的/b/c/d/e/Foo.bar - Adrian Shum

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接