LoginSignup
0
0

More than 1 year has passed since last update.

Files#walk(), find(), list(), DirectoryStream

Posted at

Files.walk()は該当ディレクトリのサブディレクトリすべてを探索
Files.find()は該当ディレクトリのサブディレクトリすべてを探索、BiPredicateのフィルタ付き
Files.list()は該当ディレクトリの一覧
Files.newDirectoryStream()は該当ディレクトリの一覧

public class Outer {
    public static void main(String[] args) throws Exception{
        Path p = Paths.get("C:\\dirtest");
        BiPredicate<Path,BasicFileAttributes> bp = (p1,bfa) -> {
            return p1.toFile().getAbsolutePath().endsWith(".java");
        };
        Stream<Path> s = Files.find(p,3,bp);
        s.forEach(System.out::println);
        System.out.println("----------------------------------------------");
        s = Files.walk(p,3);
        s.forEach(System.out::println);
        method2(p.toFile());
        System.out.println("----------------------------------------------");
        DirectoryStream<Path> ds = Files.newDirectoryStream(p);
        for(Path p2:ds) {
            System.out.println(p2);
        }
        System.out.println("----------------------------------------------");
        Files.list(p).forEach(System.out::println);
    }
    static void method2(File pf) {
        System.out.println("----------------------------------------------");
        method(pf, "", null);
    }
    static void method(File pf, String indent, FileFilter ff) {
        class SampleClass {
            File[]  method() {
                if(ff == null) return pf.listFiles();
                else  return pf.listFiles(ff);
            }
        }
        File[] fs = new SampleClass().method();
        for(File f:fs) {
            System.out.print(indent + f.getName());
            if(f.isDirectory())  System.out.println("   is directory.");
            else  System.out.println("    is file");
            if(f.isDirectory())  method(f, indent + " ",ff);
        }
    }
}
C:\dirtest\dir1\dir2\test.java
C:\dirtest\dir1\test.java
C:\dirtest\test.java
----------------------------------------------
C:\dirtest
C:\dirtest\cook.jpg
C:\dirtest\cookcpy.jpg
C:\dirtest\dir1
C:\dirtest\dir1\dir2
C:\dirtest\dir1\dir2\dir3
C:\dirtest\dir1\dir2\test.java
C:\dirtest\dir1\dir2\test.txt
C:\dirtest\dir1\test.java
C:\dirtest\dir1\test.txt
C:\dirtest\iii
C:\dirtest\sample.ser
C:\dirtest\showa.txt
C:\dirtest\test.java
C:\dirtest\test.txt
C:\dirtest\testmakefile.txt
C:\dirtest\testwritefile.txt
----------------------------------------------
cook.jpg    is file
cookcpy.jpg    is file
dir1   is directory.
 dir2   is directory.
  dir3   is directory.
   dir4   is directory.
    test.java    is file
    test.txt    is file
   test.java    is file
   test.txt    is file
  test.java    is file
  test.txt    is file
 test.java    is file
 test.txt    is file
iii    is file
sample.ser    is file
showa.txt    is file
test.java    is file
test.txt    is file
testmakefile.txt    is file
testwritefile.txt    is file
----------------------------------------------
C:\dirtest\cook.jpg
C:\dirtest\cookcpy.jpg
C:\dirtest\dir1
C:\dirtest\iii
C:\dirtest\sample.ser
C:\dirtest\showa.txt
C:\dirtest\test.java
C:\dirtest\test.txt
C:\dirtest\testmakefile.txt
C:\dirtest\testwritefile.txt
----------------------------------------------
C:\dirtest\cook.jpg
C:\dirtest\cookcpy.jpg
C:\dirtest\dir1
C:\dirtest\iii
C:\dirtest\sample.ser
C:\dirtest\showa.txt
C:\dirtest\test.java
C:\dirtest\test.txt
C:\dirtest\testmakefile.txt
C:\dirtest\testwritefile.txt
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0