プログラミング 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


関連記事

【SpringBoot入門】#4~ headerの作成と埋め込み

概要 全ての画面で使用するヘッダーを作成します。 そして、Index画面に埋め込むところまでを行います。 共通ヘッダーの作成

・&lt …

【Javaポートフォリオ】なぜスクレイピングツールがおすすめか?

なぜスクレイピングツールか? ・スキルに需要がある ・総合的なスキルが身に付く ・個人開発に応用できる スキルに需要がある 執筆時点(2021年3月28日)時点で、ランサーズに1643件の発注がありま …

【SpringBoot入門】#6~ 登録機能の実装

概要 画面から送信されたデータをDBに登録する機能を実装します。 入力データはバリデーションによってチェックされることとします。 サーバサイドは以下のように各層で処理分けされます。 <Contorol …

【JdbcTemplate】IN句に値を入れて複数件取得する方法

JdbcTemplateでIN句に毎回異なる数の値をセットして、 複数のレコードを取得する場合は、「NamedParameterJdbcTemplate」で取得することができます。 コード例 [cra …

【Java】文字列の完全一致と部分一致を判定する方法

Stringオブジェクトのmatches、containsメソッドを使った説明です。 戻り値:boolean ■追記(2022/5/4) ・前方一致にstartWithメソッドの用例 ・後方一致にen …

SpringFramworkの良書

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

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