in initializer-generator/src/main/java/com/alibaba/initializer/core/template/loader/ClasspathTemplateLoader.java [104:155]
private void visitFileSystem(TempFileVisitor visitor, Resource resource)
throws IOException {
if (!resource.isFile()) {
return;
}
File rootFile = resource.getFile();
Path scanRoot = Paths.get(rootFile.getAbsolutePath());
Files.walkFileTree(scanRoot, EnumSet.of(FileVisitOption.FOLLOW_LINKS),
Integer.MAX_VALUE, new FileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir,
BasicFileAttributes attrs) {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path originPath,
BasicFileAttributes attrs) {
String fileName = originPath.getFileName().toString();
Path relativePath = originPath.subpath(scanRoot.getNameCount(),
originPath.getNameCount());
Path relativeFolderPath = relativePath.getNameCount() == 1
? null
: relativePath.subpath(0,
relativePath.getNameCount() - 1);
visitor.visit(new CodeTemplate(relativeFolderPath, fileName) {
@Override
public Reader getReader() {
try {
return new FileReader(originPath.toFile());
} catch (FileNotFoundException e) {
throw new BizRuntimeException(ErrorCodeEnum.SYSTEM_ERROR, "", e);
}
}
}
);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFileFailed(Path file, IOException exc) {
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) {
return FileVisitResult.CONTINUE;
}
});
}