본문으로 바로가기

로컬 경로에있는 폴더나 파일을 삭제하는 방법을 알아보겠습니다.


d드라이브에 임시폴더와 파일을 생성한 뒤 삭제하는 방법을 예제를 통해 알아볼게요.




D드라이브 아래에 deletetest 폴더 아래에 txt파일 두개가 있습니다.


먼저 파일을 다루기위해 아래 패키지를 import 해줍니다.

import java.io.File;


다음 폴더의 경로를 알아옵니다.

String path = "D:\\deletetest";


File 객체를 생성합니다. 생성자로 경로를 넣어줍니다.

File deleteFolder = new File(path);


폴더를 지우는건 쉽습니다.

deleteFolder.delete();

파일 객체를 delete() 해주면 바로 지워집니다. 하지만 폴더 하위에 파일이 존재 할 경우 지워지지 않습니다.


때문에 하위에있는 파일을 모두 제거해 주어야 하는데요,

File[] deleteFolderList = deleteFolder.listFiles();


선언된 폴더객체에 listFiles() 함수로 폴더안의 파일의 경로를 배열로 받아올 수 있습니다.

File[] deleteFolderList = deleteFolder.listFiles();
			
for (int j = 0; j < deleteFolderList.length; j  ) {
	System.out.println(deleteFolderList[j]);
}
D:\deletetest\새 텍스트 문서 (2).txt
D:\deletetest\새 텍스트 문서.txt


하위 파일의 경로를 알 수 있으면 지우는건 쉽겠죠?

File[] deleteFolderList = deleteFolder.listFiles();
			
for (int j = 0; j < deleteFolderList.length; j  ) {
	deleteFolderList[j].delete();
}


이렇게 폴더내부의 파일을 모두 지웠으면 마지막으로 폴더를 지워주면 됩니다.

deleteFolder.delete();


전체소스


단, 이 방법은 폴더 하위에 파일 만 존재 할 경우입니다.


폴더 하위에 폴더가 있고 그 폴더의 하위에 파일이 있을경우 지워지지 않는데요, 이경우 폴더 내부파일 제거를 재귀적으로 호출하여 가장 아랫단부터 제거하며 올라와야합니다.




이와같이 폴더아래 폴더가 있고 그안에 파일이 있을경우 위방법으로는 폴더를 제거 할 수 없습니다.


이럴땐 함수로 만들어 재귀적으로 호출하는 방법을 사용해야 합니다.


위 코드와 다른점은 함수로 만들었다는것과 루프문에서 자식파일이 파일인지 폴더인지 구분하여 파일이면 제거, 폴더이면 재귀호출하여 폴더내부를 제거하는 방법입니다.



댓글을 달아 주세요

  1. Computer 2018.12.18 10:22

    깔끔한 설명과 내용 감사합니다.ㅎㅎ

  2. ㅇㅇ 2019.09.17 09:52

    만약 폴더아래 폴더안에 파일이 있는 경우에서, 재귀 대신에 반복문으로 만든다면 어떻게 만들어볼 수 있을까요??