Java を使用してフォルダーを削除する
-
File
クラスのdelete()
を使用して Java を使用して空のフォルダーを削除する - Java を使用してフォルダーを再帰的に削除する
- Java 8 Streams と NIO2 を使用して Java を使用してフォルダーを削除する
- Apache Common IO を使用して 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.txt
と file2.txt
が含まれている場合はどうでしょうか? このシナリオでは、上記のコードを実行しても、ディレクトリが空ではないため何も起こりません。また、delete()
メソッドは空のディレクトリに対してのみ機能することがわかっています。
再帰的な削除を使用して、空でないディレクトリを削除するというこの問題を克服できます。
Java を使用してフォルダーを再帰的に削除する
このメソッドでは、再帰とともに delete()
メソッドを使用します。 最初に test
ディレクトリ内にあるすべてのサブフォルダーとファイルを削除し、空になったら delete()
メソッドを使用して削除します。
ディレクトリ構造:
test
/ | \
/ | \
/ | \
file1.txt | file2.txt
|
hero
/ \
file3.txt file4.txt
D:
ドライブに test
フォルダーがあり、このフォルダーには file1.txt
と file2.txt
の 2つのテキスト ファイルがあり、サブフォルダー hero
にも 2つのテキスト ファイルがあります: file3.txt
と file4.txt
.
ここでは、file1.txt
、file2.txt
を削除してから、サブフォルダー hero
内に移動し、file3.txt
と file4.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 を使用すると効率が向上し、時間を節約できることも理解できました。