【Java入門】ディレクトリ内のファイルを再帰的に取得する方法

【Java入門】ディレクトリ内のファイルを再帰的に取得する方法

JavaSE6以前の書き方

JavaSE6以前では、ファイルを再帰的に取得するには、以下のようなコーディングをする必要がありました。

Java

    public static void main(String args[]){
        File f = new File("C:\\workspace\\sample");
        print(f);
    }

    //再帰的に取得する処理
    public static void print(File file){
        System.out.println(file.getPath());
        File[] fileList = file.listFiles();
        if(fileList != null){
            for(File f: fileList){
                   print(f);
            }
        }
    }

実行結果

C:\workspace\sample
C:\workspace\sample\dir2A
C:\workspace\sample\dir2A\dir3
C:\workspace\sample\dir2A\dir3\textA.txt
C:\workspace\sample\dir2A\textA.txt
C:\workspace\sample\dir2A\textB.txt
C:\workspace\sample\dir2B
C:\workspace\sample\dir2B\textA.txt
C:\workspace\sample\dir2B\textB.txt
C:\workspace\sample\textA.txt

JavaSE7以降の書き方

JavaSE7以降では、Files#walkを使用することで、以下のように簡潔にコーディングできるようになりました。
walkメソッドは、深さ優先でファイルツリーを再帰的(トラバース)に辿り、結果をStreamオブジェクトとして返します。

Java

public static void main(String args[]){
    try(Stream<Path> stream = Files.walk(Paths.get("C:\\workspace\\sample"))){
        stream.forEach(System.out::println);
    }catch(IOException e) {
        e.printStackTrace();
    }
}

実行結果はJavaSE6のときと同じ結果になります。

実行結果

C:\workspace\sample
C:\workspace\sample\dir2A
C:\workspace\sample\dir2A\dir3
C:\workspace\sample\dir2A\dir3\textA.txt
C:\workspace\sample\dir2A\textA.txt
C:\workspace\sample\dir2A\textB.txt
C:\workspace\sample\dir2B
C:\workspace\sample\dir2B\textA.txt
C:\workspace\sample\dir2B\textB.txt
C:\workspace\sample\textA.txt

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です