Java を使用してディレクトリ内のファイルを削除する

Suraj P 2023年10月12日
  1. Java の File クラスの delete() を使用してディレクトリ内のファイルを削除する
  2. Java 8 ストリームと NIO2 を使用してディレクトリ内のファイルを削除する
  3. Apache Common IO を使用してディレクトリ内のファイルを削除する
  4. まとめ
Java を使用してディレクトリ内のファイルを削除する

この記事では、フォルダー自体を削除せずに、フォルダー内に存在するファイルを削除する方法を学習します。

これを行うには複数の方法があります。 それらを1つずつ見てみましょう。

Java の File クラスの delete() を使用してディレクトリ内のファイルを削除する

Java には、ファイルを削除してディレクトリを空にするために使用される delete() というメソッドを含む java.io.File クラスがあります。

構文:

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 とサブフォルダーは変更されていません。

上記では、ディレクトリの path を格納する文字列変数を作成しました。 次に、このパスを使用して、ファイル オブジェクト obj を作成しました。

次に、listFiles() メソッドを使用して、そのパスに存在するコンテンツを一覧表示しました。

if 条件を使用して、それがディレクトリかファイルかを確認します。 ファイルの場合は削除します。 そうでなければ、何もしません。

Java 8 ストリームと NIO2 を使用してディレクトリ内のファイルを削除する

このメソッドでは、path に存在するすべてのファイルとサブフォルダーを含む 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

上記のコードを実行すると、ディレクトリおよびサブディレクトリ ファイルのすべてのファイルが深さ優先検索方式で削除されます。

ディレクトリ test とサブディレクトリ subfolder 1 および subfolder 2 はそのまま残っていることがわかります。

Apache Common IO を使用してディレクトリ内のファイルを削除する

これまで見てきたすべてのメソッドは、file および stream メソッドとともに再帰の概念を使用する単純な古い 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