山下寛人オフィシャルブログ

オイシックス株式会社 執行役員 システム本部長 山下寛人の公式ブログです。

Javaでディレクトリを削除

Javaでディレクトリを削除する場合、標準の機能ではディレクトリの中に何かある場合削除できません。そのため全部消そうとしたら中身を全部たどっていって片っ端から削除していく必要があります。大したコードではありませんが、めんどくさい。

そういう人のためにcommons ioのFileUtilsで中身があっても中身ごと削除できる機能があります。

FileUtils.deleteDirectory(dir);

対象のファイルやディレクトリを抽出する機能もあります。こちらは若干ややこしいです。APIドキュメントもあまり詳しく書いてありません。

FileUtils.listFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)

条件に合うファイルのみ抽出します。ディレクトリは含みません。

FileUtils.listFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)

条件に合うファイルとディレクトリを抽出します。

IOFileFilterのインスタンスはFileFilterUtilsクラスを使って生成します。nameFileFilter()やprefixFileFilter()といったメソッドがあります。引数が2つあってfileFilterのほうはファイルの抽出用フィルタ、dirFilterはディレクトリ用フィルタです。nullにすると下のディレクトリをたどりません。このへんの指定の仕方はちょっと特殊です。

以下サンプルコードです。

File dir = new File("/Users/h-yamashita/Documents/temp/seleniumtemp");
Collection<File> dirs = FileUtils.listFilesAndDirs(dir, FileFilterUtils.falseFileFilter(),
		FileFilterUtils.prefixFileFilter("temp_"));
for (File d : dirs) {
	if (d.compareTo(dir) != 0) {
		FileUtils.deleteDirectory(d);
	}
}