티스토리 뷰
java.io 패키지의 File 객체를 통해 특정 디렉토리 하위의 파일 리스트를 얻어올 수 있는데, 어떠한 경우에 있어서는 특별한 파일명이나 혹은 확장자명을 가진 파일 리스트만 추출해야 하는 경우가 있습니다.
이때 유용하게 사용 가능한 객체가 FilenameFilter 인데, FilenameFilter 는 interface 이기에 사용자가 implements 하여 구현해야 합니다.
특정 디렉토리에서 확장자가 txt 인 파일의 리스트만 출력하는 간단한 예제를 살펴보겠습니다.
우선 FilenameFilter 를 구현하는 클래스를 작성합니다.
TXTFileFilter.java
package com.negafix.files; import java.io.File; import java.io.FilenameFilter; /** ** com.negafix.files * |_ TXTFileFilter.java ** Created By Eclipse 3.5 Galilreo * @date : 2010. 2. 2. 오후 4:42:57 * @version : * @author : BeomJun Kim */ public class TXTFileFilter implements FilenameFilter { public boolean accept(File dir, String name) { return name.toLowerCase().endsWith(".txt"); } }
TXTFileFilter 클래스는 파일명에 .txt 가 포함되어 있는지 여부를 검사하여 boolean 값을 리턴하는 구조입니다.
파일명에 .txt 가 포함되어 있으면 true, 그렇지 않으면 false 를 리턴하게 되겠죠.
FilterTest.java
package com.negafix; import java.io.File; import com.negafix.files.TXTFileFilter; /** ** com.negafix * |_ FilterTest.java ** Created By Eclipse 3.5 Galilreo * @date : 2010. 2. 2. 오후 4:41:04 * @version : * @author : BeomJun Kim */ public class FilterTest { /** * @param args */ public static void main(String[] args) { FilterTest checker = new FilterTest(); File base = new File("D:\\"); File[] fileList = null; if(checker.isAvailable(base)) { TXTFileFilter textFileFilter = new TXTFileFilter(); fileList = base.listFiles(textFileFilter); } else { new Exception("Not exist or not a directory."); System.exit(-1); } for(int idx=0; idx<fileList.length; idx++) { System.out.println(fileList[idx].getAbsoluteFile()); } } /** * Check available directory. * @param directory * @return boolean result */ public boolean isAvailable(File directory) { boolean result = false; if(directory.exists() && directory.isDirectory()) { result = true; } return result; } }
FilterTest 클래스는 파일 리스트를 받아오고자 하는 디렉토리가 존재하는지 여부를 검사하고 유효한 디렉토리일 경우 listFiles(FilenameFilter filter) 메소드를 통하여 확장자가 .txt 인 파일들만 File 배열로 받아 출력하는 기능을 합니다.
특히 FilterTest 클래스에서 다음 두 라인에 유념하시면 FilenameFilter 가 어떻게 사용되는지 알 수 있습니다.
TXTFileFilter textFileFilter = new TXTFileFilter(); fileList = base.listFiles(textFileFilter);
테스트 결과는 다음과 같았습니다.
D:\ansi_file.txt D:\utf8_bom_file.txt D:\utf8_file.txt
'프로그래밍 > Java' 카테고리의 다른 글
Java Application 으로 화면 ScreenShot 이미지 생성. (1) | 2010.04.13 |
---|---|
Java로 UTF-8 파일 쓰기 (0) | 2010.02.02 |
NIO Package를 활용한 파일 복사 기능 구현 (0) | 2009.12.10 |
Apache Commons Project - XMLConfiguration TIP#1 (1) | 2009.12.09 |
Apache Commons Project - Configuration (2) | 2009.12.09 |
공지사항