JAVA 및 Web 프로젝트에서는 임시폴더와 같은 특정 경로의 폴더를 삭제해야하는 경우가 있습니다.
만약 이 폴더 내에 파일이 존재하지 않는다면 문제 없이 바로 해당 폴더를 삭제할 수 있지만 파일이 존재할 경우 먼저 폴더 내의 파일을 모두 삭제해주어야 폴더를 삭제할 수 있습니다.
간단한 코드로 폴더를 삭제하는 방법을 알아보도록 하겠습니다.
다음과 같이 "delete" 라는 이름의 directory를 삭제하려고 하는데 하위폴더1, 하위폴더2 그리고 하위폴더2 안에는 파일들이 존재하고 있습니다.
이때 아래와 같이 폴더를 삭제하면 어떻게 될까요?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
package com.acma.document;
import java.io.File;
import org.junit.Test;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class DeleteDirectoryAndAllFiles {
@Test
public void test() {
File targetFolder = new File("D:/data/test/delete");
boolean isDelete = deleteDirectoryAndFiles(targetFolder);
log.info("isDelete >>> {}", isDelete);
}
private boolean deleteDirectoryAndFiles(File targetFolder) {
return targetFolder.delete();
}
}
|
cs |
예상한 결과와 같이 "디렉토리 및 파일" 삭제에 실패하였음을 확인할 수 있습니다.
"디렉토리 및 디렉토리 하위 파일"을 모두 삭제할 수 있도록 코드를 수정 후 실행해보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
package com.acma.document;
import java.io.File;
import org.junit.Test;
import lombok.extern.slf4j.Slf4j;
@Slf4j
public class DeleteDirectoryAndAllFiles {
@Test
public void test() {
File targetFolder = new File("D:/data/test/delete");
boolean isDelete = deleteDirectoryAndFiles(targetFolder);
log.info("isDelete >>> {}", isDelete);
}
private boolean deleteDirectoryAndFiles(File targetFolder) {
if(!targetFolder.exists()) {
log.info("{} >>> 경로가 존재하지 않습니다.", targetFolder);
return false;
}
File[] files = targetFolder.listFiles();
for(File file : files) {
if(file.isDirectory()) {
log.info("{} >>> 파일은 디렉토리입니다. 하위 파일을 확인하겠습니다.", file);
deleteDirectoryAndFiles(file);
}
file.delete();
log.info("{} >>> 파일이 삭제되었습니다.", file);
}
return targetFolder.delete();
}
}
|
cs |
위의 코드와는 다르게 해당 "디렉토리와 디렉토리 하위 파일"을 모두 삭제하였음을 확인할 수 있습니다.
# 특정 경로의 폴더를 삭제하기 위해서는 먼저 폴더 내의 파일을 모두 삭제해야 한다.
'Programing > Java' 카테고리의 다른 글
[Java] 파일 이동 (0) | 2019.09.05 |
---|---|
[JAVA] 비슷한 이름의 특정 파일 모두 지우기 (0) | 2019.06.21 |