Java プロジェクト
src/main/java
src/main/resources
の出力フォルダー
target/classes
これは、
ClassLoader loader = Thread.currentThread().getContextClassLoader();
URL url = loader.getResource("./");
String path = url.getPath();
でパスを取得できる。
この target/classes 下の全ファイルPATH のリスト List<String> を求めるのは、
再帰メソッドが必要で、
これらを求めるユーティリティーを以前、作成した⇒ FileCollection
yipuran-core/FileCollection.java at master · yipuran/yipuran-core · GitHub
これを使って、、
ClassLoader loader = Thread.currentThread().getContextClassLoader(); URL url = loader.getResource("./"); String path = url.getPath(); FileCollection fc = FileCollection.of(path); List<String> list = fc.scan(f->{ return f.isFile();}).stream().map(f->f.getAbsolutePath()).collect(Collectors.toList());
今、思うと、FileCollection の
/** * Predicate走査実行→コレクション取得. * @param p 検査するPredicate<File> * @return List<File> */ public List<File> scan(Predicate<File> p){ return parse(file, new ArrayList<>(), p); } /** * 走査 Consumer実行. * @param c Consumer<File> */ public void scan(Consumer<File> c){ parse(file, c); }
これは、同じ scan というメソッドになっていて良くない。
Predicate走査の方は、今度、名前を変えようと思う。
そうすれば、上のロジックももう少し綺麗に書ける。
fc.scan(f->{ return f.isFile();}).
でなくて、Predicate走査のメソッド名を scanProvision という名にすれば、
fc.scanProvision(f->f.isFile()).
と書けたのだ。
yipuran-core バージョン 4.32 で、そうしようと思う。