D 드라이브에 ExampleDirectory라는 폴더가 있고, 그 안에 파일 7개와 디렉터리 2개가 들어 있다고 가정해 보겠습니다.
디렉터리 구조 살펴보기
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()메서드를 다시 호출하여 하위 디렉터리 내부까지 순회하며 파일을 삭제합니다.
이 방식을 사용하면 지정한 최상위 디렉터리뿐 아니라 그 안의 중첩된 하위 폴더에 있는 파일까지 모두 삭제할 수 있으며, 디렉터리(폴더) 자체는 삭제되지 않고 그대로 남게 됩니다.