와일드 카드 이름의 Java 항아리에서 자원을 어떻게 발견 할 수 있습니까?

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

  •  02-07-2019
  •  | 
  •  

문제

내 클래스 로더가 와일드 카드 패턴을 사용하는 것을 알고있는 모든 XML 파일을 발견하고 싶습니다. 이것을 할 방법이 있습니까?

도움이 되었습니까?

해결책

약간의 속임수가 필요하지만 여기에 관련성이 있습니다. 블로그 항목. 먼저 항아리의 URL을 알아 내고 항아리를 열고 내용물을 스캔합니다. 나는 당신이 '/meta-inf/manifest.mf'를 찾아 모든 항아리의 URL을 발견 할 것이라고 생각합니다. 디렉토리는 또 다른 문제가 될 것입니다.

다른 팁

용수철 ApplicationContext 이 작업을 사소하게 할 수 있습니다.

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

보다 ResourcePatternResolver#getResources, 또는 ApplicationContext.

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

Snippet을 pom.xml에 넣으십시오

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

Jar-File은 또 다른 지퍼 파일입니다.

그래서 나는 당신이 사용하는 Jar-Files를 반복 할 수 있다고 생각합니다 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$"));

건배. 키이스.

글쎄, 그것은 자바 내에서 온 것이 아니라

jar -tvf jarname | grep xml$

항아리의 모든 XML을 보여줄 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top