プロが教えるわが家の防犯対策術!

仕事で必要にせまられてしまい、プログラムを
書いているのですが、わからない部分があるため教えてください。
ディレクトリ内のファイルをすべて削除したいと思っています。
ファイル1つだけを削除はできましたが、ファイル全てを一度に削除する方法はありますか。

<略>
FILE file = new File("C:\\test","test.txt");
file.delete();
......

ファイル名にワイルドカードを指定したのですが削除はできませんでした。こういったやり方は可能ですか。また他のやり方があれば教えてください。

C言語だとシステムコマンドを直接使用できる指定可能なやり方があったと思うのですが、JAVA内でもプログラム内でDOSコマンドを実行させるようなやり方がないでしょうか。

A 回答 (4件)

ワイルドカードのような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");
}
    • good
    • 0

「回答ありがとうございます。

 再帰的に削除ですか・・・」
既に回答されておられる方のどの方法でも、ご質問者の希望である「ディレクトリ内のファイルをすべて削除したい」は
実現可能だと思うのですが、どこに満足されていないのでしょうか?

あるディレクトリ配下のファイル、ディレクトリツリー毎 ごっそり削除したいのでしょうか?
 それでしたら、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();
}
}

それとも、ワイルドカードを使用した削除を行いたいのでしょうか?
すいません、ご質問者のやりたい事がいまいち、見えないもので、質問に対して質問で答えてしまいました。

この回答への補足

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

補足日時:2005/05/11 00:48
    • good
    • 2

Apache-commonsプロジェクトで公開されている


commons-ioライブラリにある
FileUtilsクラスのcleanDirectory()メソッドを使うと、
ディレクトリの中身を丸ごと一括削除してくれます。

この内部でも結局ループを使って一つずつ削除しているので、ワイルドカードなどで一括削除するような機能は無いのだと思います。

参考URL:http://jakarta.apache.org/commons/io/apidocs/org …
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/04/27 22:11

File(パス)


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

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

お礼日時:2005/04/27 22:08

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!