티스토리 뷰


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
공지사항