このエントリーをはてなブックマークに追加


ディレクトリ配下のファイルを削除するサンプル

Javaで指定したディレクトリ配下のファイルをすべてを削除するサンプルソースになります。

関連記事

サンプルソース

getFileList()メソッドを再帰呼出しすることにより、サブディレクトリ内のファイル一覧を取得しています。 尚、本サンプルプログラムは以下の引数を必要とします。

java RemoveFiles ディレクトリ

ディレクトリを指定しないとUsageが表示されます。

サンプルソースの構造は、指定したサブディレクトリ内のファイル一覧をList<File>に格納します。
ファイルおよびディレクトリの一覧を作成後、java.util.Collectionsのreverseメソッドを使ってリスト内の並びを反転させています。
これは、最後に見つかったファイルまたはディレクトリから削除したいため、reverseでListを反転しています。

fileRemoveFiles.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();
        }
    }
}

コンパイルおよび実行結果

上記サンプルソースをコンパイルして実行してみます。

  1. コンパイルいます。
    $ javac RemoveFiles.java
  2. 引数を指定しないと以下のようにUsageが表示されます。
    $ java RemoveFiles
    Usage: java RemoveFiles <directory>
  3. ファイルや存在しないファイルまたはディレクトリを指定するとメッセージが表示されます。
    $ java RemoveFiles foo
    foo directory is not found.
    $ touch dummy ; java RemoveFiles dummy
    dummy is file, Please set the directory.
  4. テスト用にディレクトリ・サブディレクトリ・ファイルを作成します。
    $ 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
     
  5. fooディレクトリを引数としてコンパイルしたサンプルプログラムを実行してみます。
    $ ls -ld foo
    drwxrwxr-x 4 sakura sakura 4096  7月 16 00:48 foo
    $ java RemoveFiles foo
  6. 削除されていることを確認します。
    $ ls -l foo
    ls: 'foo' にアクセスできません: そのようなファイルやディレクトリはありません

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


添付ファイル: fileRemoveFiles.java 27件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-07-16 (日) 00:55:31 (493d)