로컬 경로에있는 폴더나 파일을 삭제하는 방법을 알아보겠습니다.
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();
전체소스
import java.io.File; | |
public class StringEx { | |
public static void main(String[] args) { | |
String path = "D:\\deletetest"; | |
File deleteFolder = new File(path); | |
if(deleteFolder.exists()){ | |
File[] deleteFolderList = deleteFolder.listFiles(); | |
for (int j = 0; j < deleteFolderList.length; j++) { | |
deleteFolderList[j].delete(); | |
} | |
if(deleteFolderList.length == 0 && deleteFolder.isDirectory()){ | |
deleteFolder.delete(); | |
} | |
} | |
} | |
} |
단, 이 방법은 폴더 하위에 파일 만 존재 할 경우입니다.
폴더 하위에 폴더가 있고 그 폴더의 하위에 파일이 있을경우 지워지지 않는데요, 이경우 폴더 내부파일 제거를 재귀적으로 호출하여 가장 아랫단부터 제거하며 올라와야합니다.
이와같이 폴더아래 폴더가 있고 그안에 파일이 있을경우 위방법으로는 폴더를 제거 할 수 없습니다.
이럴땐 함수로 만들어 재귀적으로 호출하는 방법을 사용해야 합니다.
import java.io.File; | |
public class StringEx { | |
public static void main(String[] args) { | |
String path = "D:\\deletetest"; | |
deleteFile(path); | |
} | |
public static void deleteFile(String path) { | |
File deleteFolder = new File(path); | |
if(deleteFolder.exists()){ | |
File[] deleteFolderList = deleteFolder.listFiles(); | |
for (int i = 0; i < deleteFolderList.length; i++) { | |
if(deleteFolderList[i].isFile()) { | |
deleteFolderList[i].delete(); | |
}else { | |
deleteFile(deleteFolderList[i].getPath()); | |
} | |
deleteFolderList[i].delete(); | |
} | |
deleteFolder.delete(); | |
} | |
} | |
} |
위 코드와 다른점은 함수로 만들었다는것과 루프문에서 자식파일이 파일인지 폴더인지 구분하여 파일이면 제거, 폴더이면 재귀호출하여 폴더내부를 제거하는 방법입니다.