2012-10-09 2 views
3

클래스 경로에 특정 이름을 가진 모든 파일을 나열하려고합니다. 따라서 복수 발생이 예상되므로 Class.getResource(String)이 작동하지 않습니다.지정한 이름으로 classpath에있는 모든 리소스를 찾는 방법은 무엇입니까?

기본적으로 클래스 경로의 모든 위치에서 특정 이름 (예 : xyz.properties)으로 모든 파일을 식별 한 다음 누적 방식으로 메타 데이터를 읽어야합니다.

나는 Collection<URL> Class.getResources(String) 효과를 원하지만 비슷한 것을 찾을 수 없습니다.

추 신 : 제 3 자 라이브러리를 사치스럽게 사용할 수 없으므로 자택 솔루션을 필요로합니다.

+3

이 비슷한 질문은 도움이 될 수 있습니다. http://stackoverflow.com/questions/6730580/how-to-read-several-resource-files-with-the-name-name-from-different-jars – logoff

답변

3

Enumeration getResources(String name)을 클래스 로더에서 사용할 수 있습니다. 예를 들어

:

Enumeration<URL> enumer = Thread.currentThread().getContextClassLoader().getResources("/Path/To/xyz.properties"); 
while (enumer.hasMoreElements()) { 
    System.out.print(enumer.nextElement()); 
} 
+0

줄 수 있습니까? OP가 그것을 어떻게 사용해야하는지 예제. 그는 클래스 패스의 패턴과 일치하는 모든 자원을 찾고자합니다. 링크를 제공하는 것만으로는 IMO만으로는 충분하지 않습니다. – maba

+0

'ClassLoader # findResources()'는'protected'입니다. – maba

+0

@maba 고마워, 나는 시정을 유지했다. API 문서에 세심한주의를 기울이지 않았다. BTW 사용법은 매우 간단하지만 어쨌든 사용법을 사용하여 내 대답을 편집합니다. –

1

내가 뭘하면 내가 클래스 경로에서 자바 소스 파일을 읽고 ClassLoader를 사용하여 처리 할 수 ​​있습니다. 나는 다음과 같은 코드를 사용하고 있습니다 :

ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); 

assert (classLoader != null); 

// pkgName = "com.comp.pkg" 
String path = pkgName.replace('.', '/'); 

// resources will contain all java files and sub-packages 
Enumeration<URL> resources = classLoader.getResources(path); 

if(resources.hasMoreElements()) { 
     URL resource = resources.nextElement();  
     File directory = new File(resource.getFile()); 
     // .. process file, check this directory for properties files 
} 

희망이 당신을 돕고 싶습니다.

관련 문제