プログラミング Java

【Java】ディレクトリまたはファイルのみを再帰的に削除する

投稿日:

概要

再帰的にファイルやディレクトリを削除したいことがあります。
そんなときにサラッと書けるコードです。

環境

Java8以降

実装

指定したディレクトリを含めて全て削除

指定したディレクトリを含めて全て削除したいときのコードです。

  • Files.walkで指定したrootPathをルートとみなすツリー構造のStreamを返します。
    (かなりざっくりとした説明です)
  • sorted(Comparator.reverseOrder())を指定することでディレクトリも削除されます。
    ディレクトリを削除するにはディレクトリ内のファイルを削除しておく必要があります。
    逆順ソートによりPath名が長い順に処理されるようになるため、必然的にディレクトリ内のファイルから削除されます。
    (例)ソートされた結果
     /dir/abc.txt
     /dir/d.txt
     /dir
  • map(Path::toFile)はPathをFileオブジェクトに変換して、後続のFile::deleteが実行できるようにします。
  • peek(System.out::println)によってソートされた順を見ることができます。
  • forEach(File::delete)で順次削除します。

指定したディレクトリのうちファイルのみ削除

再帰的に削除する対象をファイルに絞りたい場合は以下のコードです。

ディレクトリを全て削除するコードの差分のみ記載します。

  • filter(File::isFile)で処理対象をファイルに指定します。
    (例)処理結果
     /dir/abc.txt  ← 削除
     /dir/d.txt   ← 削除
     /dir      ← 残る
     /dir/bk/xyz.txt ← 削除
     /dir/bk     ← 残る
  • sorted(Comparator.reverseOrder())はディレクトリを残すため不要です。

まとめ

  • Java8ならば、Streamで削除処理を簡単に記述できる。
  • ディレクトリを含めて削除したい場合、sorted(Comparator.reverseOrder())でファイルを先に削除すること。
  • ファイルだけを削除したい場合、filter(File::isFile)で対象を絞ること。

参考

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-プログラミング, Java
-,

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


関連記事

ITエージェントが保有している案件数を比較してみました

概要 ITエージェントが保有している案件はどのくらいあるのか? また、Java案件に参画するにはどのエージェント経由が有利か? というちょっとした興味を元に調べてみました。 調査実施日:2021年5月 …

Facadeパターンの使い道をコードとクラス図で説明します。

Facadeパターンはどんな役に立つか? 簡単にいうと、複数の処理のまとめ役。 なので、依頼1つでいろんな仕事をやってくれる点で役に立つ。 Facadeパターンの要件 Facadeクラスはあくまでサブ …

AWSへWebアプリケーション(Java)をデプロイする方法(書籍紹介)

対象者 ・個人開発者 ・ポートフォリオ作成者 手順 こちらの書籍を参考に私自身がAWSにデプロイした手順です。 書籍では図解もあってわかり易く解説されているので、ここでは流れを簡潔に説明します。 すで …

【SpringBoot入門】#8~ 検索機能の実装

概要 ・検索フォームから条件を指定して検索すると、条件に一致する結果が一覧画面に表示される。 ・検索条件は複合的に指定できることとする。 ・検索結果は適切にフォーマットされることとする。  (日付はy …

オブジェクト指向とは何なのかを簡単に説明してみる

オブジェクト指向とは何なのか? これを私の理解を元に、ごくごく簡単に説明してみたいと思います。   オブジェクト指向とは? オブジェクト指向とは何かを説明するために、 「オブジェクト」と「指 …

記事を探す

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。