private void visitFileSystem()

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;
                    }
                });
    }