Javaで指定したディレクトリ配下のファイルをすべてを削除するサンプルソースになります。
getFileList()メソッドを再帰呼出しすることにより、サブディレクトリ内のファイル一覧を取得しています。 尚、本サンプルプログラムは以下の引数を必要とします。
java RemoveFiles ディレクトリ
ディレクトリを指定しないとUsageが表示されます。
サンプルソースの構造は、指定したサブディレクトリ内のファイル一覧をList<File>に格納します。
ファイルおよびディレクトリの一覧を作成後、java.util.Collectionsのreverseメソッドを使ってリスト内の並びを反転させています。
これは、最後に見つかったファイルまたはディレクトリから削除したいため、reverseでListを反転しています。
import java.io.File; import java.util.List; import java.util.ArrayList; import java.util.Collections; class RemoveFiles { private void usage() { System.err.println("Usage: java RemoveFiles <directory>"); System.exit(1); } private List<File> getFileList(String dir, List<File> fileList) { File f = new File(dir); File[] fl = f.listFiles(); if (fl != null) { for (File item : fl) { fileList.add(item); if (item.isDirectory()) { getFileList(dir + System.getProperty("file.separator") + item.getName(), fileList); } } } return fileList; } public static void main(String[] args) { RemoveFiles me = new RemoveFiles(); // check arguemnts if ((args.length !=1)) { me.usage(); } // directory ? File f = new File(args[0]); if (!f.exists()) { // false System.out.println(args[0] + " directory is not found."); System.exit(2); } if (f.isFile()) { System.out.println(args[0] + " is file, Please set the directory."); System.exit(3); } if(!f.isDirectory()) { System.out.println(args[0] + " is unknown, Please set the directory."); System.exit(4); } List<File> fileList = new ArrayList<File>(); fileList.add(new File(args[0])); me.getFileList(args[0], fileList); Collections.reverse(fileList); for (File fitem : fileList) { fitem.delete(); } } }
上記サンプルソースをコンパイルして実行してみます。
$ javac RemoveFiles.java
$ java RemoveFiles Usage: java RemoveFiles <directory>
$ java RemoveFiles foo foo directory is not found. $ touch dummy ; java RemoveFiles dummy dummy is file, Please set the directory.
$ mkdir -p foo/{bar1,bar2}/{hoge1,hoge2,hoge3} $ touch foo/foofile foo/bar1/{barfile1,barfile2} $ touch foo/bar1/hoge1/{hoge1file,hoge2file} $ touch foo/bar2/hoge3/{hoge3-1file,hoge3-2file} $ tree foo foo ├── bar1 │ ├── barfile1 │ ├── barfile2 │ ├── hoge1 │ │ ├── hoge1file │ │ └── hoge2file │ ├── hoge2 │ └── hoge3 ├── bar2 │ ├── hoge1 │ ├── hoge2 │ └── hoge3 │ ├── hoge3-1file │ └── hoge3-2file └── foofile
$ ls -ld foo drwxrwxr-x 4 sakura sakura 4096 7月 16 00:48 foo $ java RemoveFiles foo
$ ls -l foo ls: 'foo' にアクセスできません: そのようなファイルやディレクトリはありません
以上、指定したディレクトリ配下のファイルを削除するサンプルソースでした。