Как я могу обнаружить ресурсы в банке Java с подстановочным именем?

StackOverflow https://stackoverflow.com/questions/133229

  •  02-07-2019
  •  | 
  •  

Вопрос

Я хочу обнаружить все XML-файлы, о которых знает мой ClassLoader, используя шаблон подстановочных знаков.Есть какой-либо способ сделать это?

Это было полезно?

Решение

Это требует некоторой хитрости, но вот уместный запись в блоге.Сначала вы выясняете URL-адреса банок, затем открываете банку и сканируете ее содержимое.Я думаю, вы обнаружите URL-адреса всех jar-файлов, выполнив поиск `/META-INF/MANIFEST.MF'.Каталоги — другое дело.

Другие советы

Весна ApplicationContext можно сделать это тривиально:

 ApplicationContext context = new ClassPathXmlApplicationContext("applicationConext.xml");
 Resource[] xmlResources = context.getResources("classpath:/**/*.xml");

Видеть ResourcePatternResolver#getResources, или Контекст приложения.

 List<URL> resources = CPScanner.scanResources(new PackageNameFilter("net.sf.corn.cps.sample"), new ResourceNameFilter("A*.xml"));

поместите фрагмент в свой pom.xml

<dependency>
    <groupId>net.sf.corn</groupId>
    <artifactId>corn-cps</artifactId>
    <version>1.0.1</version>
</dependency>

JAR-файл — это всего лишь еще один ZIP-файл, верно?

Итак, я полагаю, вы могли бы перебирать jar-файлы, используя http://java.sun.com/javase/6/docs/api/java/util/zip/ZipInputStream.html

Я думаю что-то вроде:

ZipSearcher searcher = new ZipSearcher(new ZipInputStream(new FileInputStream("my.jar"))); List xmlFilenames = searcher.search(new RegexFilenameFilter(".xml$"));

Ваше здоровье.Кит.

Ну, это не изнутри Java, а

jar -tvf jarname | grep xml$

покажет вам все XML-файлы в банке.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top