1. ファイルを収集する対象のディレクトリ構造
./
article-result.html
article.html
FileVisitorTest.js
dir1/
test1.txt
dir2/
test2.js
2. 実行するスクリプト(FileVisitorTest.js):
var Files = Java.type("java.nio.file.Files");
var Paths = Java.type("java.nio.file.Paths");
var FileVisitResult = Java.type("java.nio.file.FileVisitResult");
var SimpleFileVisitor = Java.type("java.nio.file.SimpleFileVisitor");
var ArrayList = Java.type("java.util.ArrayList");
function getPathListByPredicate(rootDir, predicateFunc) {
var SimpleFileVisitorExtender = Java.extend(SimpleFileVisitor);
var pathList = new ArrayList();
var visitor = new SimpleFileVisitorExtender() {
visitFile: function(path, attrs) {
if (predicateFunc(path, attrs)) {
pathList.add(path);
}
return FileVisitResult.CONTINUE;
}
};
Files.walkFileTree(Paths.get(rootDir), visitor);
return pathList;
}
var rootDir = Paths.get(".");
// List all files
var allFiles = getPathListByPredicate(rootDir, function(path, attrs) {
return true;
});
print("allFiles=${allFiles}");
// List .js files
var jsFiles = getPathListByPredicate(rootDir, function(path, attrs) {
return path.getFileName().toString().toLowerCase().endsWith(".js");
});
print("jsFiles=${jsFiles}");
3. jjsで実行する:
>jjs -scripting -fullversion FileVisitorTest.js
nashorn full version 1.8.0_66-b18
allFiles=[.\article-result.html, .\article.html, .\dir1\test1.txt, .\dir2\test2.js, .\FileVisitorTest.js]
jsFiles=[.\dir2\test2.js, .\FileVisitorTest.js]