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


関連記事

Iteratorパターンは何のためにあるか?

Iteratorパターンとは Iteratorパターンとは、「何らかのリストから順次取り出す仕組み」です。 Iteratorパターンではわざわざインターフェースで実装していますよね。 これは、イテレー …

no image

【PHP】配列と連想配列と多次元配列の説明と使用例

配列とは? 1つの変数に複数の値を持つものです。 整数型や文字列型は1つの変数に1つの値を持ちますが、配列は同じようなデータの集まりを1つの変数に持つことができるようになっています。 配列には通常の添 …

【Java】Optionalが処理できないならデフォルト値を返そう

概要 Optionalはnullである可能性を明示的に返してくれる便利なコンテナ・オブジェクトです。 if(obj == null)… といったことをしなくてよくなったのは素晴らしいことだ …

【SpringBoot入門】#12~ 削除機能の実装

概要 ダイアログでOK押下された場合の削除処理を実行します。 画面からリクエストされた書籍情報IDをキーに、論理削除を実装します。 システム開発ではほとんどの場合、論理削除を行います。 物理削除するの …

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

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

記事を探す

SpringFramworkの良書

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

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

サイト内検索