0

我有一个 spring-boot 应用程序,我想收集所有放置在/src/main/resources目录中的 XML 文件,该目录的结构如下所示:

-resources
   -files
      -dir1
        -dir11
           a.xml
           b.xml
      -dir2
        -dir21
          c.xml
      -dir3
        -dir31
          d.xml 

我尝试了一些解决方案,例如使用ResourceUtils.getFile, ClassPathResource, ResourcePatternResolverClassLoader但是这些仅在我在 IDE 中运行我的应用程序时才有效,如果我将我的应用程序打包为 jar 并部署它,它们就不起作用。我得到以下异常

java.io.FileNotFoundException: class path resource [files] cannot be resolved to absolute file path because it does not reside in the file system:

目录名(dir1、dir11、dir2 等)和文件名(a.xml、b.xml)不固定,因此在代码中不为人所知。

这些目录和文件可以有任何名称。

resources/files是唯一已知的目录,我想收集该目录及其子目录中的所有 xml 文件。

我已经尝试了几乎所有在网上找到的解决方案,但似乎对我的用例没有任何作用。

如何才能做到这一点?提前致谢。

4

1 回答 1

0

编辑

您可以获取已知目录files并递归列出所有File[]对象。

如果您使用它会更容易org.apache.commons.io.FileUtils.listFiles(File directory, String[] extensions, boolean recursive);

我创建了一个如下所示的辅助函数来包装和的String.format逻辑classpath:

public static File getResourceAsFile(String relativeFilePath) throws FileNotFoundException {
        return ResourceUtils.getFile(String.format("classpath:%s",relativeFilePath));

}

并使用它,

String relativeFilePath ="files";

File file =getResourceAsFile(relativeFilePath);


Collection<File> files=FileUtils.listFiles(file,null,true); //


如果要读取所有xml文件,则将第二个参数传递为

Collection<File> files=FileUtils.listFiles(file,new String[]{"xml"},true);

于 2021-01-28T16:35:30.210 回答