Использование метода ClassLoader для извлечения всех ресурсов в классах в качестве входных потоков - PullRequest
3 голосов
/ 26 мая 2009

Моя проблема, как вы думаете, довольно распространенная, но мне до сих пор не удалось найти решение.

Создание веб-приложения Java под Tomcat 5.5 (хотя необходимо, чтобы оно могло быть развернуто в любом месте, например, в среде WebLogic, следовательно, загрузка ресурсов требовалась как потоки). Хорошая практика диктует, что файлы ресурсов помещаются в WEB-INF / classes и загружаются с использованием метода getResourceAsStream () ClassLoader. Все хорошо, когда вы знаете название ресурса, который хотите загрузить.

Моя проблема заключается в том, что мне нужно загрузить все (в том числе рекурсивно в непустые подкаталоги), которые живут в подкаталоге классов .

Так, например, если у меня есть следующее в WEB-INF / classes :

folderX / folderY

folderX / folderY / fileA.properties

folderX / fileB.properties

Мне нужно, чтобы классы fileA.properties и fileB.properties были загружены без фактического знания их имен перед запуском приложения (т.е. мне нужна возможность произвольной загрузки ресурсов из любого каталога в WEB-INF / classes).

Какой самый элегантный способ сделать это? Какой объект я могу запросить, чтобы найти нужную мне информацию (пути к ресурсам для каждого из требуемых ресурсов)? Лучше было бы использовать решение, не относящееся к сервлетам (если возможно, все это в рамках загрузки классов).

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 26 мая 2009

Насколько я знаю, такой способности не существует, поскольку загрузчик классов пытается загружать только те вещи, которые он запрашивает. Он не выполняет предварительную выборку всех элементов в пути к классам и не рассматривает их как структуру каталогов.

Я бы решил эту проблему: создайте список каталогов в текстовом файле со всеми соответствующими ресурсами во время сборки и включите его в войну, а затем пройдитесь по этому пути.

1 голос
/ 26 мая 2009

Вы можете сделать это с некоторыми хитростями :)

Получить ресурс как URL, извлечь протокол:

  • файл протокола - получить URL-адрес, и у вас есть папка, поиск файлов.
  • протокол jar / zip - извлеките путь jar / zip и используйте JarFile для просмотра файлов и извлечения всего, что находится под вашим путем / пакетом.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...