2012-06-25 127 views
3

我想从我的类路径中提取某些类型的文件并将其放入临时目录,并且我希望根据其“相对于类路径的相对路径”来提取资源。相对于类路径提取资源

我能够使用Spring的PathMatchingResourcePatternResolver检索匹配资源的列表。例如,我正在从类路径中扫描classpath*:/xyz/**/*.bar,假设在类路径中我有一个/xyz/some/dir/foo.bar,并且我想将此资源提取到MY_TEMP_DIR/some/dir/foo.bar。无论如何,这个资源的相对路径到类路径,所以我可以相应地构建输出位置?

PathMatchingResourcePatternResolver仅返回资源数组,我只能检索资源的URL,但我也想知道这些资源的“根”目录是什么。返回的资源可以是各种“格式”,如jar:file:/some/path/somejar.jar!/xyz/some/dir/foo.bar,file:/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)?

+0

*“我试图从我的类路径中某些类型的文件,并把到一个临时目录,” *为什么呢?它为用户提供了什么功能? –

+0

现在我正在使用它来解决我正在使用的lib的技术缺陷,他们在从classpath获取资源时效果不佳。我想将捆绑的资源拿到本地目录,让lib从那里读取它。不过,我相信这不是我需要这种功能的唯一情况,在过去我遇到过其他一些情况,我想从classpath中提取资源,但仍保留其原始“目录”结构。 –

回答

1

如果您使用PathMatchingResourcePatternResolver.getResources(String pattern)来获取与该模式匹配的资源列表,那么分析由Resource.getURL()返回的URL应该是微不足道的。

它应该是这个样子jar:file://path/to/jar.jar!/path/to/your/resource/foo.bar

+0

如果您已阅读我的问题,您应该知道我的问题不是关于如何获取资源,而是如何获取资源的“路径”,以便在提取时可以维护目录结构。解析JAR URL很简单,但是文件怎么样?给定一个'file:/ a/b/c/d/e/Foo.bar',我应该怎么知道它是'/ a/b/c/d'目录下的'/ e/Foo.bar',或者它'/ a'下是'/ b/c/d/e/Foo.bar'吗? –