[Java] 자바로 폴더(디렉토리) 삭제하기(하위파일, 폴더 포함)

자바 소스로 폴더나 파일을 삭제할수도 있습니다. File.delete()함수를 활용하면 쉽게 구현이 가능한데요. 파일은 쉽게 삭제가 가능한데 문제는 폴더입니다. 폴더는 하위에 파일이 하나라도 남아있으면 File.delete()함수가 작동하지 않습니다. 그러므로 폴더를 삭제하기전에 폴더안에있는 파일을 삭제해주는 작업을 선행하셔야합니다.

 

폴더안의 파일들을 제거한 뒤 대상 폴더제거

import java.io.File;
public class Delete {
    public static void main(String[] args) {
	String path = "D:\\Eclipse\\Java\\새 폴더";
	File folder = new File(path);
	try {
	    while(folder.exists()) {
		File[] folder_list = folder.listFiles(); //파일리스트 얻어오기
				
		for (int j = 0; j < folder_list.length; j++) {
			folder_list[j].delete(); //파일 삭제 
			System.out.println("파일이 삭제되었습니다.");
					
		}
				
		if(folder_list.length == 0 && folder.isDirectory()){ 
			folder.delete(); //대상폴더 삭제
			System.out.println("폴더가 삭제되었습니다.");
		}
            }
	 } catch (Exception e) {
		e.getStackTrace();
	}
  }
}

파일삭제

 

폴더삭제

 

하지만 이렇게 할 경우 문제가 하나 발생합니다. 만약 제거 할 대상 폴더안에 또 다른 폴더가 있으면 그 폴더는 File.delete()함수가 작동하지않아 삭제되지 않으므로 while문이 끝없이 도는 무한루프에 빠지는 함정이 발생합니다. 

 

폴더안의 폴더, 파일등을 재귀적으로 제거한 뒤 대상 폴더제거

해결방법으로 재귀함수를 호출하여 밑에있는 폴더부터 차례차례 삭제하는 방법을 사용할 수 있습니다.

import java.io.File;

public class Delete2 {
	public static void main(String[] args) {
	    String path = "D:\\Eclipse\\Java\\새 폴더";
	    deleteFolder(path);
	}
	
	public static void deleteFolder(String path) {
		
	    File folder = new File(path);
	    try {
		if(folder.exists()){
                File[] folder_list = folder.listFiles(); //파일리스트 얻어오기
				
		for (int i = 0; i < folder_list.length; i++) {
		    if(folder_list[i].isFile()) {
			folder_list[i].delete();
			System.out.println("파일이 삭제되었습니다.");
		    }else {
			deleteFolder(folder_list[i].getPath()); //재귀함수호출
			System.out.println("폴더가 삭제되었습니다.");
		    }
		    folder_list[i].delete();
		 }
		 folder.delete(); //폴더 삭제
	       }
	   } catch (Exception e) {
		e.getStackTrace();
	   }
    }
}

폴더 및 파일삭제
대상폴더삭제

 

[Java] 자바로 폴더(디렉토리) 생성하기

[Java] 자바로 폴더(디렉토리),파일 복사하기

[Java] 자바로 폴더(디렉토리),파일 이동시키기 / 잘라내기

 

댓글

Designed by JB FACTORY