Java를 사용하여 폴더 삭제

Suraj P 2023년10월12일
  1. Java를 사용하여 빈 폴더를 삭제하려면 File 클래스의 delete()를 사용하십시오.
  2. Java를 사용하여 재귀적으로 폴더 삭제
  3. Java 8 스트림 및 NIO2를 사용하여 Java를 사용하여 폴더 삭제
  4. Apache Common IO를 사용하여 Java를 사용하여 폴더 삭제
  5. 결론
Java를 사용하여 폴더 삭제

이 기사에서는 Java 프로그래밍 언어를 사용하여 폴더/디렉토리를 삭제하는 방법을 배웁니다. 여러 가지 방법이 있습니다. 하나씩 살펴보겠습니다.

Java를 사용하여 빈 폴더를 삭제하려면 File 클래스의 delete()를 사용하십시오.

Java에는 java.io.File 클래스가 있습니다. 여기에는 파일과 빈 디렉토리를 삭제하는 데 사용되는 delete()라는 메서드가 포함되어 있습니다.

통사론:

file_object.delete()

시스템의 D: 드라이브에 test라는 이름의 빈 디렉토리가 있다고 가정해 보겠습니다. 이제 delete() 메서드를 사용하여 이것을 삭제하는 방법을 살펴보겠습니다.

예제 코드:

import java.io.File;

public class Example {
  public static void main(String[] args) {
    String path = "D:\\test";
    File obj = new File(path);
    obj.delete();
  }
}

위의 코드가 실행되면 시스템의 D: 드라이브에서 test 폴더가 삭제되는 것을 볼 수 있습니다.

위의 코드에서 디렉터리의 경로를 저장하는 문자열 변수를 만들었습니다. 그런 다음 이 경로를 사용하여 파일 개체 obj를 만들었습니다.

마지막으로 delete() 메서드를 사용하여 파일 객체 obj가 참조하는 해당 경로의 디렉토리를 삭제합니다.

그러나 test 폴더에 일부 파일이 포함되어 있으면 file1.txtfile2.txt라고 합시다. 이 시나리오에서는 위의 코드가 실행될 때 디렉터리가 비어 있지 않기 때문에 아무 일도 일어나지 않으며 delete() 메서드는 빈 디렉터리에 대해서만 작동한다는 것을 알고 있습니다.

재귀 삭제를 사용하여 비어 있지 않은 디렉토리를 삭제하는 이 문제를 극복할 수 있습니다.

Java를 사용하여 재귀적으로 폴더 삭제

이 메서드에서는 재귀와 함께 delete() 메서드를 사용합니다. 아이디어는 test 디렉토리에 있는 모든 하위 폴더와 파일을 먼저 삭제하고 비어 있으면 delete() 메서드를 사용하여 삭제할 수 있다는 것입니다.

디렉토리 구조:

             test
           /  |  \
          /   |   \
         /    |    \
   file1.txt  |   file2.txt
              |
             hero
            /    \
     file3.txt    file4.txt

D: 드라이브에 test 폴더가 있으며, 이 폴더에는 file1.txtfile2.txt라는 두 개의 텍스트 파일이 있습니다. 또한 하위 폴더 hero가 있으며, 이 폴더에는 다시 file3.txtfile4.txt라는 두 개의 텍스트 파일이 포함되어 있습니다.

여기에서 file1.txt, file2.txt를 삭제한 다음 하위 폴더 hero로 이동하여 file3.txtfile4.txt를 삭제합니다. 하위 폴더가 비어 있으므로 쉽게 삭제할 수 있습니다.

이 모든 작업이 끝나면 test 디렉토리도 비게 되며 delete() 메서드를 사용하여 쉽게 삭제할 수 있습니다.

연산:

  • 삭제할 디렉터리의 모든 파일과 하위 폴더를 가져옵니다.
  • 디렉토리가 아닌 모든 자식은 파일을 삭제해야 함을 의미합니다.
  • 재귀를 종료합니다.
  • 하위 폴더/하위 디렉터리인 각 자식에 대해 1~3단계를 재귀적으로 반복합니다.
  • delete() 메서드를 사용하여 기본 디렉터리를 삭제합니다.

위의 알고리즘을 구현하려면 listFiles()isDirectory()라는 두 가지 함수를 사용해야 합니다.

listFiles() 메서드는 대상 디렉토리에 있는 모든 파일 및 하위 폴더의 추상 경로(개체) 배열을 반환합니다. isDirectory()는 현재 개체가 디렉토리인 경우 true를 반환하는 부울 함수입니다. 그렇지 않으면 false를 반환합니다.

예제 코드:

import java.io.File;

public class Example {
  static void recursiveDelete(File targetDirectory) {
    File[] data = targetDirectory.listFiles();

    for (File file : data) {
      if (file.isDirectory())
        recursiveDelete(file);

      else
        file.delete();
    }

    targetDirectory.delete();
  }

  public static void main(String[] args) {
    String path = "D:\\test";
    File obj = new File(path);
    recursiveDelete(obj);
  }
}

Java 8 스트림 및 NIO2를 사용하여 Java를 사용하여 폴더 삭제

이 방법에서는 해당 경로의 모든 파일과 하위 폴더를 포함하는 Stream<Path>를 반환하는 Files.walk(Path) 방법을 사용할 수 있습니다.

예제 코드:

import java.io.*;
import java.nio.file.*;
import java.util.*;

public class Example {
  public static void main(String[] args) throws IOException {
    Path path = Paths.get("D:\\test");

    Files.walk(path).sorted(Comparator.reverseOrder()).forEach(data -> {
      try {
        System.out.println("deleting: " + data);
        Files.delete(data);
      } catch (IOException obj) {
        obj.printStackTrace();
      }
    });
  }
}

위의 코드가 실행되면 디렉토리의 모든 내용을 삭제한 다음 깊이 우선 검색 방식으로 디렉토리 자체를 삭제합니다.

출력:

deleting: D:\test\hero\file4.txt
deleting: D:\test\hero\file3.txt
deleting: D:\test\hero
deleting: D:\test\file2.txt
deleting: D:\test\file1.txt
deleting: D:\test

Apache Common IO를 사용하여 Java를 사용하여 폴더 삭제

지금까지 우리가 본 모든 메소드는 filestream 메소드와 함께 일부 재귀 개념을 사용하는 평범한 오래된 Java 메소드입니다. 그러나 Apache Common IO FileUtils.deleteDirectory를 사용하여 디렉터리를 삭제할 수 있습니다.

기본 Java 메소드에 비해 이것을 사용하는 주요 이점은 코드 라인(LOC)이 훨씬 적어 쉽고 효율적인 작성 방법이 된다는 것입니다.

Apache 공통 IO를 사용하려면 먼저 pom.xml 파일에 종속성을 추가해야 합니다.

<dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.11.0</version>
</dependency>

예제 코드:

import java.io.*;
import org.apache.commons.io.FileUtils;

public class Example {
  public static void main(String[] args) throws IOException {
    String path = "D:\\test";
    File obj = new File(path);
    FileUtils.deleteDirectory(obj);
  }
}

결론

이 기사에서는 Java를 사용하여 디렉토리를 삭제하는 다양한 방법을 보여줍니다. 재귀 및 Java 8 스트림을 사용하는 방법을 이해했습니다.

또한 Apache Commons IO를 사용하는 것이 LOC(코드 라인)가 프로젝트 성능에 큰 영향을 미치는 경우 어떻게 더 효율적이고 시간을 절약할 수 있는지 이해했습니다.

작가: Suraj P
Suraj P avatar Suraj P avatar

A technophile and a Big Data developer by passion. Loves developing advance C++ and Java applications in free time works as SME at Chegg where I help students with there doubts and assignments in the field of Computer Science.

LinkedIn GitHub