back end/java

[Java] 파일, 폴더(디렉토리) 삭제하는 방법

노루아부지 2023. 11. 9. 23:11

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초가 걸렸습니다.

728x90
loading