File class는 파일 내부의 리스트를 찾는 메소드를 세 개 갖고 있다.
- public String[] list( FilenameFilter filter ); 디렉토리의 파일목록을 String 배열로 반환
- public File[] listFiles( FileFilter filter ); FileFilter 인스턴스에 구현된 조건에 맞는 File을 배열로 반환
- public File[] listFiles( FilenameFilter filter ); FilenameFilter 인터페이스가 구현된 조건에 맞는 File을 배열로 반환
interface FileFilter와 FilenameFilter는 특정 파일이나 디렉토리를 필터링 하여 리스트를 추출할 필요가 있을 때 사용한다.
두개의 차이점은 정의된 메소드인데 FileFilter 인터페이스에는 accept(File pathname) 이 있고. FilenameFilter인터페이스에는 accept(File dir, String name)가 있다. 파라미터를 확인하고 본인의 편의에 맞게 사용하면 될 것 같다.
FilenameFilter 인터페이스
@FunctionalInterface
public interface FilenameFilter {
/**
* Tests if a specified file should be included in a file list.
*
* @param dir the directory in which the file was found.
* @param name the name of the file.
* @return <code>true</code> if and only if the name should be
* included in the file list; <code>false</code> otherwise.
*/
boolean accept(File dir, String name);
}
활용 소스
FilenameFilter 인터페이스 사용 시 accept 메서드를 구현하여 filter결과를 boolean 형식으로 리턴하면 된다.
private static final String NUMBER_PATTERN = "^[0-9]+$";
/**
* 숫자명으로 된 디렉토리만 필터링하여 추출
* @param path
* @return
*/
public File[] selectNumberDirLists(Path path) {
File fileLists[] = null;
if (!Files.isDirectory(path)) {
return fileLists;
}
fileLists = path.toFile().listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
if (!dir.isDirectory()) {
// 디렉토리가 아닌 경우
return false;
}
if (!Pattern.matches(NUMBER_PATTERN, name)) {
// 디렉토리 명이 숫자 패턴이 아닌 경우
return false;
}
return true;
}
});
return fileLists;
}
/**
* exe 파일만 필터링하여 추출
* @param path
* @return
*/
public File[] selectExeFileLists(Path path) {
File fileLists[] = null;
fileLists = path.toFile().listFiles(new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.endsWith(".exe");
}
});
return fileLists;
}
'Dev > Java' 카테고리의 다른 글
[effective-java] 모든 객체의 공통 메소드 (0) | 2020.11.29 |
---|---|
[java] jmeter 성능 테스트 (0) | 2020.05.20 |
[effective-java] 동시성 (0) | 2020.01.15 |
[effective-java] 일반적인 프로그래밍 원칙 (0) | 2020.01.14 |
[java] CSV 파싱하기 (0) | 2019.12.13 |