【问题标题】:Reading sub-directories of a directory in class path resources with Spring Boot使用 Spring Boot 读取类路径资源中目录的子目录
【发布时间】:2020-07-21 21:36:51
【问题描述】:

我试图使用 Spring Boot 和下面给出的 sn-p 在我的类路径资源中读取目录的子目录(目录名称)。

    public List<File> getSubdirectories() {
    File file = ResourceUtils.getFile("classpath:/database/scripts");
    return Arrays.stream(file.listFiles()).filter(File::isDirectory).map(File::getFileName)
            .collect(Collectors.toList());
    }

现在,当我们从 IDE 运行此代码时,这将运行良好。 但是当我们将这个应用程序构建为 jar 并从那里运行时,它会抛出 FileNotFoundException

我也尝试将目录加载为类路径资源。但没有找到任何运气。

我目前使用的是 Java 8。所以我猜大多数 Java 7 解决方案都行不通。 有没有其他方法可以解决这个问题?

【问题讨论】:

    标签: java spring spring-boot jar directory


    【解决方案1】:

    根据 Spring documentation ResourceUtils 将在框架内部使用

    尝试改用 Resource:

    @Value("classpath:database/scripts")
    Resource directories;
    

    或者,您可以使用资源加载器:

    @Autowired
    ResourceLoader resourceLoader;
    ...
    public Resource loadDirectories() {
        return resourceLoader.getResource(
          "classpath:database/scripts");
    }
    

    【讨论】:

    • 这行不通,因为我需要父目录的子目录名称。
    • 为什么不呢?资源具有 getFile() 方法。您可以稍后检查该文件是否是目录并列出所有类似 List result = new ArrayList();搜索(“.*\\.java”,目录.getFile(),结果);
    • 我刚刚意识到你写了父目录。为什么不直接获取资源“数据库”?
    • 我们可以在使用 IDE 时执行此操作。但是从 JAR 文件中这将失败。它会抛出一个找不到文件的异常。
    • 您是否检查过您的目录是否真的存在于您的 jar 中?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-24
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多