如何获取JAR文件中资源目录内的所有资源?

Geo*_*rge 5 java spring java-8

我正在使用 Spring Boot,我想获取资源。

\n\n

这是我的目录结构:

\n\n
\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80java\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80...\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80resources\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80files\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80file1.txt\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80file2.txt\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80file3.txt\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80file4.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在尝试获取files目录中的资源。这是我为访问这些文件所做的操作:

\n\n
@Autowired\nprivate ResourceLoader resourceLoader;\n\n...\nStream<Path> walk = Files.walk(Paths.get(resourceLoader.getResource("classpath:files/").getURI()));\n
Run Code Online (Sandbox Code Playgroud)\n\n

当文件位于target目录中时,它可以在本地运行,但当我从 JAR 文件运行它时,找不到这些文件。我该如何解决?我已经检查过这些文件确实存在于位于BOOT-INF/classes/files.

\n\n

以下是 maven 如何构建资源并将其复制到 JAR 中(我不希望 .txt 文件被过滤):

\n\n
<resources>\n  <resource>\n    <directory>src/main/resources</directory>\n    <filtering>true</filtering>\n    <excludes>\n      <exclude>**/*.txt</exclude>\n    </excludes>\n  </resource>\n  <resource>\n    <directory>src/main/resources</directory>\n    <filtering>false</filtering>\n    <includes>\n      <include>**/*.txt</include>\n    </includes>\n  </resource>\n</resources>\n
Run Code Online (Sandbox Code Playgroud)\n

Sam*_*bit 8

您可以尝试使用以下代码来读取文件吗?

ResourcePatternResolver resourcePatResolver = new PathMatchingResourcePatternResolver();
Resource[] AllResources = resourcePatResolver.getResources("classpath*:files/*.txt");
 for(Resource resource: AllResources) {
    InputStream inputStream = resource.getInputStream();
    //Process the logic
 }
Run Code Online (Sandbox Code Playgroud)

这不是您所编写的代码的确切解决方案,但它将给出有关要阅读的资源的概述。