Java에서 디렉토리 내 파일을 출력하는 작업은 자주 필요한 기능입니다. 예를 들어, 디렉토리 내의 파일 목록을 확인하거나, 파일들을 처리해야 할 때 사용됩니다. 이 글에서는 Java에서 특정 디렉토리의 파일 리스트를 출력하는 방법을 두 가지 주요 방법으로 소개합니다. 바로 File 클래스와 Path와 Files 클래스를 사용한 방법입니다.
1. Java에서 File 클래스를 사용하여 파일 리스트 출력하기
File 클래스는 Java에서 오래된 방식으로 파일과 디렉토리를 처리하는 데 사용됩니다. 이를 이용하면 특정 디렉토리 내 파일과 서브디렉토리 목록을 출력할 수 있습니다. File 클래스는 파일 시스템과 상호작용하기 위한 여러 메서드를 제공하며, 디렉토리 내의 파일을 나열하는 데 사용할 수 있습니다.
1.1. File 클래스를 사용한 파일 리스트 출력 예제
import java.io.File;
public class FileListExample {
public static void main(String[] args) {
// 확인할 디렉토리 경로
String directoryPath = "C:/example/directory"; // 예시 경로
// 디렉토리 객체 생성
File directory = new File(directoryPath);
// 디렉토리가 존재하고 디렉토리인지 확인
if (directory.exists() && directory.isDirectory()) {
// 디렉토리 내의 파일 목록 가져오기
File[] files = directory.listFiles();
// 파일 목록 출력
if (files != null) {
for (File file : files) {
System.out.println(file.getName()); // 파일 이름 출력
}
} else {
System.out.println("디렉토리 안에 파일이 없습니다.");
}
} else {
System.out.println("유효한 디렉토리가 아닙니다.");
}
}
}
1.2. 코드 설명
위 코드는 File 클래스를 사용하여 디렉토리 내의 모든 파일을 출력하는 예시입니다. listFiles() 메서드를 사용하면 해당 디렉토리 내의 파일과 서브디렉토리 목록을 배열로 반환합니다. 이를 통해 파일을 순차적으로 처리할 수 있습니다.
- directory.exists(): 디렉토리가 존재하는지 확인합니다.
- directory.isDirectory(): 해당 경로가 디렉토리인지 확인합니다.
- listFiles(): 디렉토리 내의 파일 목록을 File[] 배열로 반환합니다.
1.3. 파일이 아닌 서브디렉토리 처리
listFiles() 메서드는 디렉토리 내의 서브디렉토리도 포함하여 파일 목록을 반환합니다. 따라서 파일뿐만 아니라 서브디렉토리도 함께 처리하고 싶다면 file.isDirectory()와 같은 메서드를 사용하여 이를 구분할 수 있습니다.
File 클래스 실습
※ File 클래스의 메소드 사용.
- llistFiles() : 특정 디렉토리의 파일 리스트 출력
File dir = new File("/home/test")
File files[] = dir.listFiles();
for(File f : files){
System.out.println(f.getName());
}
- listFiles(FilenameFilter filter) or listFiles(FileFilter filter) : 특정 디렉토리의 파일 리스트 출력(필터로 걸러지는 파일 리스트 출력)
//필터 : 파일명에 'test'가 포함된 파일
File dir = new File("/home/test");
FilenameFilter filter = new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
return name.contains("test");
}
};
File files[] = dir.listFiles(filter);
for(File f : files){
Systtem.out.println(f.getName());
}
2. Path와 Files 클래스를 사용하여 파일 리스트 출력하기
Java 7부터는 NIO (New I/O) 패키지가 추가되었습니다. 이를 통해 파일과 디렉토리를 더 효율적이고 현대적인 방식으로 처리할 수 있게 되었습니다. 특히 Path와 Files 클래스를 사용하면 파일을 스트림으로 처리할 수 있어 코드가 더 깔끔하고 효율적입니다.
2.1. Path와 Files 클래스를 사용한 파일 리스트 출력 예제
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class FileListWithNIO {
public static void main(String[] args) {
// 확인할 디렉토리 경로
Path directoryPath = Paths.get("C:/example/directory"); // 예시 경로
// 디렉토리가 존재하는지 확인
if (Files.exists(directoryPath) && Files.isDirectory(directoryPath)) {
try {
// 디렉토리 내의 파일 목록을 스트림으로 출력
Files.walk(directoryPath, 1) // 깊이 1로 디렉토리 내부 파일만 리스트업
.filter(Files::isRegularFile) // 일반 파일만 필터링
.forEach(file -> System.out.println(file.getFileName())); // 파일 이름 출력
} catch (IOException e) {
e.printStackTrace();
}
} else {
System.out.println("유효한 디렉토리가 아닙니다.");
}
}
}
2.2. 코드 설명
이 코드에서는 Files.walk() 메서드를 사용하여 디렉토리 내의 파일들을 스트림 방식으로 처리합니다. 스트림을 사용하면 파일을 필터링하거나 특정 조건에 맞는 파일만 처리할 수 있어 매우 유용합니다.
- Files.walk(): 디렉토리 내의 모든 파일을 스트림으로 반환합니다. 1을 인자로 넘기면 최상위 디렉토리 내의 파일만 가져옵니다.
- filter(Files::isRegularFile): 일반 파일만 필터링하여 서브디렉토리는 제외합니다.
- forEach(file -> System.out.println(file.getFileName())): 스트림을 순회하며 각 파일의 이름을 출력합니다.
2.3. NIO의 장점
- Path와 Files 클래스를 사용하면 파일을 스트림 방식으로 처리할 수 있어 메모리 효율성이 높고 코드가 간결해집니다.
- Files.walk()는 재귀적으로 디렉토리 내 파일을 탐색할 수 있습니다. 이를 활용하면 서브디렉토리까지 포함한 파일 처리도 가능합니다.
3. File 클래스와 Path/Files 클래스 비교
특성 File 클래스 사용 Path/Files 클래스 사용
성능 | 상대적으로 느림 | 더 빠르고 효율적 |
유연성 | 제한적 (서브디렉토리 처리 어려움) | 강력한 파일 처리 (스트림 사용) |
호환성 | Java 1.0부터 사용 가능 | Java 7 이상에서만 사용 가능 |
코드 간결성 | 비교적 복잡한 코드 | 더 간결하고 효율적인 코드 |
4. 어떤 방법을 선택할까?
- File 클래스는 구식이며, 간단한 파일 작업에는 적합하지만 복잡한 파일 처리에는 한계가 있을 수 있습니다. 예를 들어, 파일을 필터링하거나 조건에 맞게 처리해야 할 경우 불편할 수 있습니다.
- Path와 Files 클래스는 NIO 기반으로 파일을 스트림 방식으로 처리할 수 있어 더욱 효율적이고 현대적인 방식입니다. 대규모 파일 작업이나 복잡한 파일 처리 로직을 작성할 때 유리합니다.
따라서, 새로운 프로젝트에서는 Path와 Files 클래스를 사용하는 것이 좋으며, 기존의 코드베이스에서는 File 클래스를 사용할 수도 있습니다.
Java에서 특정 디렉토리의 파일을 출력하는 방법을 두 가지 방식으로 소개했습니다. File 클래스를 사용하는 방식은 간단하고 직관적이지만, 효율성 면에서는 다소 부족할 수 있습니다. 반면, Path와 Files 클래스를 사용하는 방식은 최신 Java 환경에 맞춰 더 효율적이고 강력한 기능을 제공합니다. 대규모 프로젝트나 파일 작업이 복잡해질 경우 Path와 Files 클래스를 사용하는 방법을 추천합니다.
'스마트웹앱콘텐츠전문가 > JAVA' 카테고리의 다른 글
[JAVA]서버에서 RequestBody 읽기 (0) | 2021.08.19 |
---|---|
대소문자관련처리 (0) | 2021.06.14 |
파일 삭제 (0) | 2021.05.10 |
Calendar를 이용한 날짜 판별 (0) | 2021.05.10 |
Args 사용 (0) | 2021.05.10 |