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


関連記事

Camtasia(カムタジア)でKrisp(クリスプ)を使う方法

Camtasiaで動画撮影する時のノイズ除去にKrispを導入する方法です。 前提 Krisp(無料版でOK)をインストール済みであること。 Pro版を試したい方は以下の招待URLからダウンロードして …

junit, テスト, junit5

【JUnit5】テストコードの基本

概要 JUnit5でテストコードを書く基本について学ぶ。 テストの命名規則 テストクラス、テストメソッドの記述には一般的な慣例があります。 ここではそれらを紹介しますが、実際にはプロジェクト内でのコー …

難しい,困難,頭を抱える

オブジェクト指向が難しいと思うならこれを読め!

オブジェクト指向はJava、JavaScript、PHP、Python、Rubyなどなど 色んな言語で使われているパラダイム(考え方)です。 上から順に追っていくだけ(手続き型)ではわからない仕組みに …

【SpringSecurity】#2~ ユーザ毎の権限設定(認可)

概要 権限によって、アクセス可能なページを制限する機能の実装します。 管理者画面を作成し、権限によって画面の出し分けを行います。 前提 #1~ ログイン画面の実装が完了していること。 管理者画面の追加 …

【Spring】JSの変更を反映させる方法

Spring Bootのおいて、JavaScriptの変更を反映させる方法です。   設定 application.properties application.propertiesに、以下 …

SpringFramworkの良書

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

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