#author("2017-07-16T00:54:56+09:00","","") #navi(../) * ディレクトリ配下のファイルを削除するサンプル [#f8a99c25] Javaで指定したディレクトリ配下のファイルをすべてを削除するサンプルソースになります。 #contents * 関連記事 [#t9546cc3] -[[サブディレクトリ内を含むファイル一覧を取得するサンプル>ファイル操作/サブディレクトリ内を含むファイル一覧を取得]] * サンプルソース [#nddeb65d] getFileList()メソッドを再帰呼出しすることにより、サブディレクトリ内のファイル一覧を取得しています。 尚、本サンプルプログラムは以下の引数を必要とします。 java RemoveFiles ディレクトリ ディレクトリを指定しないとUsageが表示されます。 サンプルソースの構造は、指定したサブディレクトリ内のファイル一覧をList<File>に格納します。~ ファイルおよびディレクトリの一覧を作成後、java.util.Collectionsのreverseメソッドを使ってリスト内の並びを反転させています。~ これは、最後に見つかったファイルまたはディレクトリから削除したいため、reverseでListを反転しています。~ &ref(RemoveFiles.java); LF 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(); } } } * コンパイルおよび実行結果 [#h2c2c160] 上記サンプルソースをコンパイルして実行してみます。 + コンパイルいます。 $ javac RemoveFiles.java +引数を指定しないと以下のようにUsageが表示されます。 $ 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 #br +fooディレクトリを引数としてコンパイルしたサンプルプログラムを実行してみます。 $ ls -ld foo drwxrwxr-x 4 sakura sakura 4096 7月 16 00:48 foo $ java RemoveFiles foo + 削除されていることを確認します。 $ ls -l foo ls: 'foo' にアクセスできません: そのようなファイルやディレクトリはありません 以上、指定したディレクトリ配下のファイルを削除するサンプルソースでした。