2012-06-25 1 views
3

Я пытаюсь извлечь определенные типы файлов из моего пути к классам и поместить в каталог temp, и я хочу, чтобы ресурсы были извлечены в соответствии с его «относительным путем к пути к классам».Извлечение ресурсов относительно пути к классам

Я могу использовать Spring PathMatchingResourcePatternResolver Spring для получения списка подходящих ресурсов. Например, я сканирую для classpath*:/xyz/**/*.bar из пути к классам, предположим, что в classpath у меня есть /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 и т. Д.

Может ли кто-нибудь дать мне подсказки о том, как добиться поиска ресурса или извлечения пути к корневому пути?

Благодаря


Edit:

Я не уверен, если это будет лучше, если я ставлю мой вопрос по-другому:

Есть ли способ узнать, что «относительный путь к пути к классам» ресурса? Просто используйте мои предыдущие примеры, если я сканирую 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) для получения списка ресурсов, соответствующих шаблону, должно быть тривиально проанализировать URL-адрес, возвращаемый Resource.getURL().

Это должно выглядеть как-то jar:file://path/to/jar.jar!/path/to/your/resource/foo.bar

+0

Если вы прочитали мой вопрос, вы должны знать, что мой вопрос заключается не в том, как получить ресурс, а в том, как получить «путь» к нему, чтобы я мог поддерживать структуру каталогов при извлечении. Разбор URL-адресов JAR прост, но как насчет файла? Учитывая 'файл:/a/b/c/d/e/Foo.bar', как я должен знать, что это'/e/Foo.bar' в каталоге '/ a/b/c/d', или он есть '/ b/c/d/e/Foo.bar' под'/a'? –