Java를 사용하여 디렉토리에서 파일 삭제

Suraj P 2023년10월12일
  1. Java에서 File 클래스의 delete()를 사용하여 디렉토리의 파일 삭제
  2. Java 8 스트림 및 NIO2를 사용하여 디렉토리에서 파일 삭제
  3. Apache Common IO를 사용하여 디렉토리에서 파일 삭제
  4. 결론
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);

    for (File temp : Objects.requireNonNull(obj.listFiles())) {
      if (!temp.isDirectory()) {
        temp.delete();
      }
    }
  }
}

위의 코드를 실행하면 test 내부의 모든 파일이 삭제되지만 메인 폴더인 test와 하위 폴더는 그대로 있는 것을 확인할 수 있습니다.

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

그런 다음 listFiles() 메서드를 사용하여 해당 경로에 있는 콘텐츠를 나열했습니다.

if 조건을 사용하여 디렉토리인지 파일인지 확인합니다. 파일이면 삭제합니다. 그렇지 않으면 우리는 아무것도 하지 않습니다.

Java 8 스트림 및 NIO2를 사용하여 디렉토리에서 파일 삭제

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

그런 다음 if 조건을 사용하여 디렉토리인지 파일인지 확인합니다. 파일이면 삭제합니다. 그렇지 않으면 우리는 아무것도 하지 않습니다.

예제 코드:

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

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

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

출력:

deleting: D:\test\subfolder 2\file4.txt
deleting: D:\test\subfolder 1\file3.txt
deleting: D:\test\file2.txt
deleting: D:\test\file1.txt

위의 코드가 실행되면 Depth First Search 방식으로 디렉토리와 서브디렉토리 파일을 모두 삭제한다.

test 디렉토리와 subfolder 1subfolder 2 하위 디렉토리가 그대로 남아 있음을 확인할 수 있습니다.

Apache Common IO를 사용하여 디렉토리에서 파일 삭제

지금까지 우리가 본 모든 메소드는 filestream 메소드와 함께 일부 재귀 개념을 사용하는 평범한 오래된 Java 메소드입니다. 그러나 Apache Common IO FileUtils.cleanDirectory()를 사용하여 기본 디렉토리 자체를 삭제하지 않고 기본 디렉토리 내의 모든 파일과 하위 디렉토리를 재귀적으로 삭제할 수 있습니다.

기본 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.cleanDirectory(obj);
  }
}

결론

이 기사에서는 Java를 사용하여 디렉토리를 삭제하는 다양한 방법을 보여줍니다. 우리는 delete() 메서드와 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

관련 문장 - Java File