본문 바로가기

스마트웹앱콘텐츠전문가/JAVA

Java 파일 처리: 디렉토리 내 파일 목록을 출력하는 방법

728x90
반응형

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 클래스를 사용하는 방법을 추천합니다.

728x90
반응형

'스마트웹앱콘텐츠전문가 > 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