Java を使用してフォルダーを削除する

Suraj P 2023年10月12日
  1. File クラスの delete() を使用して Java を使用して空のフォルダーを削除する
  2. Java を使用してフォルダーを再帰的に削除する
  3. Java 8 Streams と NIO2 を使用して Java を使用してフォルダーを削除する
  4. Apache Common IO を使用して Java を使用してフォルダーを削除する
  5. まとめ
Java を使用してフォルダーを削除する

この記事では、Java プログラミング言語を使用してフォルダー/ディレクトリを削除する方法を学習します。 これを行うには複数の方法があります。 それらを1つずつ見てみましょう。

File クラスの delete() を使用して Java を使用して空のフォルダーを削除する

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);
    obj.delete();
  }
}

上記のコードを実行すると、フォルダ test がシステムの D: ドライブから削除されていることがわかります。

上記のコードでは、ディレクトリのパスを格納する文字列変数を作成しました。 次に、このパスを使用して、ファイル オブジェクト 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 の 2つのテキスト ファイルがあり、サブフォルダー hero にも 2つのテキスト ファイルがあります: file3.txtfile4.txt.

ここでは、file1.txtfile2.txt を削除してから、サブフォルダー hero 内に移動し、file3.txtfile4.txt を削除します。 サブフォルダーは空なので、簡単に削除できます。

このすべての後、ディレクトリ test も空になりますが、これは delete() メソッドを使用して簡単に削除できます。

アルゴリズム:

  • 削除するディレクトリのすべてのファイルとサブフォルダーを取得します。
  • ディレクトリではないすべての子、つまりファイルを削除する必要があります。
  • 再帰から抜けます。
  • サブフォルダー/サブディレクトリである子ごとに、手順 1 から 3 を再帰的に繰り返します。
  • delete() メソッドを使用してメイン ディレクトリを削除します。

上記のアルゴリズムを実装するには、listFiles()isDirectory()の 2つの関数を使用する必要があります。

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 Streams と 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 を使用してフォルダーを削除する

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

また、LOC (コード行) がプロジェクトのパフォーマンスに大きく影響する場合、Apache Commons IO を使用すると効率が向上し、時間を節約できることも理解できました。

著者: 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