#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' にアクセスできません: そのようなファイルやディレクトリはありません

以上、指定したディレクトリ配下のファイルを削除するサンプルソースでした。


トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS