Java を使用してディレクトリ内のファイルを削除する
-
Java の
File
クラスのdelete()
を使用してディレクトリ内のファイルを削除する - Java 8 ストリームと NIO2 を使用してディレクトリ内のファイルを削除する
- Apache Common IO を使用してディレクトリ内のファイルを削除する
- まとめ
この記事では、フォルダー自体を削除せずに、フォルダー内に存在するファイルを削除する方法を学習します。
これを行うには複数の方法があります。 それらを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 (コード行) がプロジェクトのパフォーマンスに大きく影響する場合に、より効率的で時間を節約できることがわかりました。