2009년 7월 23일 목요일

Ant-style Patterns (와일드 카드)으로 멀티 파일 찾기

개발을 하다 보면 스프링 관련 파일 외에 개발 관련해서 파일을 읽을 경우가 발생합니다.
파일이 특정 경로에 파일 갯수가 fix가 되어 있으면 상관은 없지만 , 만약 해당 디렉토리 밑으로
서브 디렉토리 또는 파일이 주기적으로 쌓인 다면 ,즉 다이나믹하게 디렉토리 및 파일이
생성된다면 구현이 쉽지가 않을 것입니다.이럴 경우 쉽고 유용하게 스프링에서 제공 하는
클래스가 있습니다.
클래스 이름은 PathMatchingResourcePatternResolver 입니다.
API (http://static.springsource.org/spring/docs/2.5.6/api/org/springframework/core/io/support/PathMatchingResourcePatternResolver.html)
이 클래스를 사용하면 Ant-style Patterns 패턴으로 파일을 searching 할 수 있습니다.
실제로 스프링에서는 이클래스를 사용해서 xml에 정의된 파일을 파싱해서 빈 으로 등록 합니다.
(패턴 예)
/WEB-INF/*-context.xml
com/mycompany/**/applicationContext.xml
file:C:/some/path/*-context.xml
classpath:com/mycompany/**/applicationContext.xml

Example Use Case :

import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.Resource;

public class SearchFiles {

public static void main(String[] ars) throws Exception {
Resource[] resources;
PathMatchingResourcePatternResolver prcrr;
int resourceCnt;

resourceCnt = 0;
prcrr = new PathMatchingResourcePatternResolver();
//ant style matching..
resources = prcrr.getResources("classpath:app/**/*.xml");

if (resources != null) {
resourceCnt = resources.length;
for (int loopCnt = 0; loopCnt < resourceCnt; loopCnt++) {
System.out.println("== " + resources[loopCnt].getFilename() + " ==");
}
}
}
}


Result :
== a.xml ==
== xx.xml ==
만약 스프링이 아닌 프레임웍 (스트럿츠,Webwork) 또는 core 자바로 사용할 경우
spring-core.jar,commons-logging.jar 두 개 라이브러리 참조 하시면 됩니다.

댓글 없음:

댓글 쓰기