はじめに
本記事では再帰処理を用いてファイルやディレクトリを削除する方法を紹介します。
初投稿なのでご意見等あればコメントお願いします!
実装
/**
* ファイルを再帰的に削除する
* @param file 削除するファイルまたはディレクトリ
*/
public static void deleteFile(File file) {
// ファイルが存在しなければ終了
if (!file.exists()) {
return;
}
// ディレクトリであれば子を削除
if (file.isDirectory()) {
for (File child : file.listFiles()) {
deleteFile(child);
}
}
// 対象のファイルを削除
file.delete();
}
ディレクトリであれば子のファイルオブジェクトを先に削除することで空の状態で削除することができます。
おまけ
再帰処理が使えて喜んだのも束の間、やっぱり先駆者様がたくさんいました…笑
これだけで終わるのはもったいないので、少し応用的なものを紹介します!
/**
* ファイルまたはディレクトリに含まれるファイルの数のみをカウントする
* @param file ファイルまたはディレクトリ
* @return ファイルの数
*/
public static int countFile(File file) {
int count = 0;
// ファイルが存在しなければ終了
if (!file.exists()) {
return count;
}
// ディレクトリであれば子を再帰的にカウント, ファイルであれば自己をカウント
if (file.isDirectory()) {
for (File child : file.listFiles()) {
count += countFile(child);
}
} else {
count = 1;
}
// 合計を返却
return count;
}
上のメソッドは引数のオブジェクト以下に存在するファイルの数のみをカウントできます!
このメソッドの実用性はともかく、再帰処理はプログラミングしてる感じがして好きですね笑