Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java로 디렉터리 내 모든 파일 재귀적으로 삭제하기(파일만 삭제)


D 드라이브에 ExampleDirectory라는 폴더가 있고, 그 안에 파일 7개와 디렉터리 2개가 들어 있다고 가정해 보겠습니다.

Java로 디렉터리 내 모든 파일 재귀적으로 삭제하기(파일만 삭제)

디렉터리 구조 살펴보기

  • SampleDirectory1 — SampleFile1.txt, SampleFile2.txt 두 개의 파일이 포함되어 있습니다.

  • SampleDirectory2 — SampleFile2.txt, SampleFile3.txt 두 개의 파일이 포함되어 있습니다.

이번 글에서는 이 디렉터리와 하위 디렉터리에 있는 파일만 전부 삭제하고, 폴더 자체는 그대로 유지하는 방법을 알아보겠습니다. 핵심 원리는 간단합니다. 재귀(recursion)를 활용해 폴더 안의 항목을 하나씩 확인하면서, 파일이면 바로 삭제하고 디렉터리면 그 안으로 다시 들어가 같은 작업을 반복하는 것입니다.

예제 코드

다음 Java 예제는 ExampleDirectory 디렉터리 내의 모든 파일을 재귀적으로 삭제합니다.

import java.io.File;
import java.io.IOException;
public class DeletingAllFiles {
    public static void deleteFiles(File dirPath) {
        File filesList[] = dirPath.listFiles();
        for(File file : filesList) {
            if(file.isFile()) {
                file.delete();
            } else {
                deleteFiles(file);
            }
        }
    }
    public static void main(String args[]) throws IOException {
        // 디렉터리에 대한 File 객체 생성
        File file = new File("D:\\ExampleDirectory");
        // 모든 파일과 디렉터리 삭제 처리
        deleteFiles(file);
        System.out.println("Files deleted........");
    }
}

실행 결과

Files deleted........

코드 동작 원리

  • listFiles() — 대상 디렉터리에 있는 모든 파일과 하위 디렉터리를 File[] 배열 형태로 반환합니다.

  • isFile() — 현재 항목이 일반 파일인지 판별합니다. 파일이라면 delete() 메서드를 호출하여 즉시 삭제합니다.

  • 재귀 호출 — 항목이 디렉터리인 경우, 같은 deleteFiles() 메서드를 다시 호출하여 하위 디렉터리 내부까지 순회하며 파일을 삭제합니다.

이 방식을 사용하면 지정한 최상위 디렉터리뿐 아니라 그 안의 중첩된 하위 폴더에 있는 파일까지 모두 삭제할 수 있으며, 디렉터리(폴더) 자체는 삭제되지 않고 그대로 남게 됩니다.