본문 바로가기

Programing/Java

[JAVA] 특정 폴더 내 모든 파일 삭제 및 폴더 삭제

JAVA 및 Web 프로젝트에서는 임시폴더와 같은 특정 경로의 폴더를 삭제해야하는 경우가 있습니다.

만약 이 폴더 내에 파일이 존재하지 않는다면 문제 없이 바로 해당 폴더를 삭제할 수 있지만 파일이 존재할 경우 먼저 폴더 내의 파일을 모두 삭제해주어야 폴더를 삭제할 수 있습니다.

 

간단한 코드로 폴더를 삭제하는 방법을 알아보도록 하겠습니다.

 

 

D:/data/test/delete 경로의 directory를 삭제하려고 하는데, 하위폴더 및 파일이 존재

 

 

다음과 같이 "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

 

 

위의 코드와는 다르게 해당 "디렉토리와 디렉토리 하위 파일"을 모두 삭제하였음을 확인할 수 있습니다.

 

 

D:/data/test 폴더 내 "delete directory 및 하위 file"이 모두 삭제

 

 

# 특정 경로의 폴더를 삭제하기 위해서는 먼저 폴더 내의 파일을 모두 삭제해야 한다.

'Programing > Java' 카테고리의 다른 글

[Java] 파일 이동  (0) 2019.09.05
[JAVA] 비슷한 이름의 특정 파일 모두 지우기  (0) 2019.06.21