• ベストアンサー

JAVA内で複数のファイルを削除したい

仕事で必要にせまられてしまい、プログラムを 書いているのですが、わからない部分があるため教えてください。 ディレクトリ内のファイルをすべて削除したいと思っています。 ファイル1つだけを削除はできましたが、ファイル全てを一度に削除する方法はありますか。 <略> FILE file = new File("C:\\test","test.txt"); file.delete(); ...... ファイル名にワイルドカードを指定したのですが削除はできませんでした。こういったやり方は可能ですか。また他のやり方があれば教えてください。 C言語だとシステムコマンドを直接使用できる指定可能なやり方があったと思うのですが、JAVA内でもプログラム内でDOSコマンドを実行させるようなやり方がないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • osumitan
  • ベストアンサー率33% (102/307)
回答No.3

ワイルドカードのようなOS依存の機能はJavaにはないんじゃないでしょうか?(たぶん) ワイルドカードも結局は、それを解釈する処理がリストを取ってやっているのでしょうけれど。 DOSのコマンドを実行させるなら、java.lang.Runtimeのexecメソッドが使えると思います。 -------- Runtime rt = Rutime.getRuntime(); int result = rt.exec("hoge.exe").exitValue(); if(result == 0) {  System.out.println("OK"); } else {  System.out.println("ERROR"); }

その他の回答 (3)

  • y_nakkan
  • ベストアンサー率46% (24/52)
回答No.4

「回答ありがとうございます。  再帰的に削除ですか・・・」 既に回答されておられる方のどの方法でも、ご質問者の希望である「ディレクトリ内のファイルをすべて削除したい」は 実現可能だと思うのですが、どこに満足されていないのでしょうか? あるディレクトリ配下のファイル、ディレクトリツリー毎 ごっそり削除したいのでしょうか?  それでしたら、No.2さんが書かれています FileUtilsクラスのcleanDirectory(File directory) や、 同クラスの別のメソッド deleteDirectory(File directory) が使えると思います。一回コールするだけで、 ごそっと削除してくれます。 また、No.3さんの方法でも可能です。"hoge.exe"の代わりに "rmdir /s /q ドライブ名:ディレクトリ名" を 指定すればいいです。 No.1さんの方法はご自分で再帰的なロジックを作る必要はあります。 単純に、配下にディレクトリツリーを持たない、あるディレクトリ内のファイルを全て削除するだけなら、No.1さんの方法の 簡略版である下記の方法で可能です。 //あるディレクトリ配下のファイル全削除 File[] objFiles = (new File("ディレクトリ名")).listFiles(); if ( objFiles != null ) { for(int i=0; i< objFiles.length; i++ ) { objFiles[i].delete(); } } それとも、ワイルドカードを使用した削除を行いたいのでしょうか? すいません、ご質問者のやりたい事がいまいち、見えないもので、質問に対して質問で答えてしまいました。

kadomaru
質問者

補足

皆様ありがとうございました、お礼が遅くなりました。削除したいフォルダが複数あることと、削除したいファイル名が特定できないためワイルドカードを使用して削除したいと考えたのですが1つずつしか削除できないのであれば大変だなあと考えていたのですが提案していただいた方法でOKでした。

  • thamansa
  • ベストアンサー率40% (95/232)
回答No.2

Apache-commonsプロジェクトで公開されている commons-ioライブラリにある FileUtilsクラスのcleanDirectory()メソッドを使うと、 ディレクトリの中身を丸ごと一括削除してくれます。 この内部でも結局ループを使って一つずつ削除しているので、ワイルドカードなどで一括削除するような機能は無いのだと思います。

参考URL:
http://jakarta.apache.org/commons/io/apidocs/org/apache/commons/io/FileUtils.html
kadomaru
質問者

お礼

回答ありがとうございます。 再帰的に削除ですか・・・

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

File(パス) でディレクトリのパスを作成し List()を使って下層のファイルやディレクトリのリストを得て全ての下層のファイルやディレクトリを再帰的に削除した後、 delete()で、空になったディレクトリを消す というような感じでいいと思います。

kadomaru
質問者

お礼

回答ありがとうございます。 再帰的な方法しかなさそうですね・・・

関連するQ&A