java에서 별도의 외부 라이브러리를 사용하지 않고 삭제하는 방법은 다음과 같이 두 가지가 있습니다.
1. java.nio.file.Files
- delete()
- deleteIfExists()
2. java.io.File
- detete()
1. java.nio.file.Files - delete()
Files.delete() 메소드를 사용하여 파일 또는 디렉터리를 삭제할 수 있습니다.
파일 또는 디렉토리를 삭제하기 위해서는 다음과 같은 사항을 주의해야 합니다.
- 해당 파일이 존재하는지 확인해야 합니다. 삭제 대상이 없으면, NoSuchFileException이 발생합니다.
- 삭제하려는 대상이 디렉토리이면, 디렉터리는 비어 있어야 합니다. 디렉터리 안에 파일이 있으면, DirectoryNotEmptyException이 발생합니다.
- 파일이 열려있거나, JVM 또는 다른 응용프로그램에서 사용중이면 파일을 삭제하지 못하고 Exception이 발생합니다.
다음은 사용 예제입니다.
import java.io.IOException;
import java.nio.file.*;
public class FileDeletionExample {
public static void main(String[] args) {
// 삭제할 파일의 경로 지정
Path filePath = Paths.get("/경로/에서/파일.txt");
try {
// 파일 삭제 시도
Files.delete(filePath);
System.out.println("파일이 성공적으로 삭제되었습니다.");
} catch (NoSuchFileException e) {
System.err.println("삭제하려는 파일이 존재하지 않습니다.");
} catch (DirectoryNotEmptyException e) {
System.err.println("디렉터리가 비어있지 않습니다.");
} catch (IOException e) {
System.err.println("파일을 삭제하는 동안 IOException이 발생했습니다.");
}
}
}
2. java.nio.file.Files - deleteIfExists()
Files.deleteIfExists() 메서드는 파일을 삭제하려고 시도하기 전에 해당 파일이 존재하는지 확인하고, 파일이 존재하면 삭제를 시도하고 성공 여부를 반환하는 메서드입니다. 이를 통해 파일이 존재하지 않아도 예외를 던지지 않고 조용히 처리할 수 있습니다.
(delete()의 경우에는, 파일이 존재하지 않는 경우 NoSuchFileException이 발생했지만, deleteIfExist()의 경우에는 Exception이 발생하지 않습니다.)
다음은 사용 방법 입니다.
import java.io.IOException;
import java.nio.file.*;
public class FileDeletionExample {
public static void main(String[] args) {
// 삭제할 파일의 경로 지정
Path filePath = Paths.get("/경로/에서/파일.txt");
try {
// 파일 삭제 시도 (존재하지 않아도 예외를 던지지 않음)
boolean deleted = Files.deleteIfExists(filePath);
if (deleted) {
System.out.println("파일이 성공적으로 삭제되었습니다.");
} else {
System.out.println("파일이 존재하지 않아 삭제에 실패했습니다.");
}
} catch (IOException e) {
System.err.println("파일을 삭제하는 동안 IOException이 발생했습니다.");
}
}
}
3. 맺으며
이 글에서는 java.nio.file.Files만 소개합니다. java.nio.file.Files가 훨씬 빠르기 때문입니다.
파일 조작의 새로운 길, `java.nio.file.Files` vs `java.io.File`
Java에서 파일 조작에 필요한 API로 오랜 기간동안 사용되어온 java.io.File과 Java 7에서 도입된 java.nio.file.Files는 둘 다 파일 시스템 조작을 위한 도구이지만, java.nio.file.Files가 왜 더 선호되는지에 대
yjh5369.tistory.com
다음과 같이 임의의 데이터를 가진 파일을 10만 개를 생성 후 삭제하는 프로그램을 만들었습니다.
public static void main(String[] args) {
int count = 100000;
String path = "d:/test/log";
String json = "{\"test\":\"임의의 json 데이터\"}";
for (int i = 0; i < count; i++) {
FileUtil.write(path + "/" + i + ".json", json);
}
long startTime = System.currentTimeMillis();
File folder = new File(path);
File[] fileList = folder.listFiles();
// fileList의 파일 모두 삭제
for (int i = 0; i < fileList.length; i++) {
// File file = fileList[i];
// if (file.isFile()) {
// file.delete();
// }
try {
Path path1 = Paths.get(fileList[i].getPath());
Files.delete(path1);
} catch (Exception e) {
log.error("delete error", e);
}
}
long endTime = System.currentTimeMillis();
log.error("TIME : " + (endTime - startTime) / 1000 + "s");
}
이 프로그램을 실행할 경우 저의 환경에서 파일이 모두 삭제되는 데 걸리는 시간은 java.io.File 사용 시 10초가 걸리고, java.nio.file.Files 사용 시 5초가 걸렸습니다.
'back end > java' 카테고리의 다른 글
[JAVA] Google Authenticator(OTP)를 이용한 two factor 개발 방법 (0) | 2024.01.16 |
---|---|
spring boot session timeout setting (0) | 2023.11.16 |
파일 조작의 새로운 길, `java.nio.file.Files` vs `java.io.File` (0) | 2023.11.09 |
Gson을 사용한 Java 8 LocalDateTime의 직렬화 및 역직렬화 (0) | 2023.11.05 |
자바 클래스 파일 버전 확인하는 방법 (0) | 2023.11.05 |