글롭 (glob) - 파일 패턴 일치 여부

프로그램 내에서 작업할 파일 이름들(즉, 파일 네임 필터)을 사용자에게 선택하도록 하려는데 텍스트 상자 하나 두고 '정규표현식을 입력하시오'라고 하려니 '정규 표현식이 뭐지?'라고 할 사람들이 태반일테고, 그래서 도스환경에서 많이 사용하던 와일드 카드 문자 형식을 사용해 볼까하고 이래 저래 찾아봤더니만 이게 이름이 글롭(glob)이라고 부른다는군..
예를 들면, '*.txt' 같은거 말이지..

그럼 이제, 사용자에게서 글롭 형식을 문자열로 입력 받아서 정규식 표현으로 바꾸면 되겠지 하고 막연히 생각하다가 자바에서 이미 지원하고 있다는걸 찾아냈다.
단, 지원 버전은 Java1.7이상

사용법은 의외로 간단하다.
PathMatcher 객체는 FileSystems의 getPathMatcher()에서 받아온다. 이때 매개변수로 패턴 문자열을 넘겨주면 된다. 패턴 문자열은 글롭인 때에는 "glob:"으로 시작하고, 정규식인 때에는 "regex:"로 시작하며, 그 뒤에는 패턴 문자를 붙여준다.
일치 여부를 확인하고자 하는 Path객체를 PathMatcher 객체의 match() 메서드에 넘겨주면 boolean 형식의 답을 알려준다.



     public static void main(String[] args) {
           File folder = new File( "D:\\work\\somefolder");
           File[] list = folder.listFiles();
           String pattern = "my_file*.png";
           PathMatcher matcher = FileSystems.getDefault().getPathMatcher("glob:" + pattern);
            for (File f : list) {
                 boolean result = matcher.matches(f.toPath().getFileName());
                // 이후, 각자 알아서 처리한다
           }
     }

이 블로그의 인기 게시물

좌표 변환: 회전 이동

Unmappable character for encoding MS949

Hello JNI (3), C 라이브러리에 문자열 전달