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


関連記事

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

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

【Java入門】ラムダ式の基本構文と変数スコープ

概要 Javaにおけるラムダ式について解説します。 ラムダ式とは? OracleのJavaドキュメントに簡潔な説明があったので引用したいと思います。 Lambda expressions enable …

【Java】画像ファイルをバイナリで比較する方法

  画像ファイルの比較 比較元ファイル 素材はPhotoACから拝借しました。 コピー元画像:PCを持つ女性 コピーしたファイルとの比較(True) コピー元ファイルをコピーしただけのファイ …

オブジェクト指向でじゃんけんを作ってみる

最近、プログラム自体を書いていない時間を多いので、再勉強がてら少しコードを書いてみました。 何を作ったか? テーマ:じゃんけん(1対1) 言語:Java OOPで考慮したこと ・ゲームを管理するコント …

Java SE 11 Goldに合格する確実な方法

前提 Java SE 11 GoldはSilverに合格していないと受験できません。 飛び級的な合格はないので、Silverに合格していない方は先にSilverを取得しましょう。 現状を知る 自分がど …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

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

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