我正在使用Sping Boot ,我想获取资源。
下面是我的目录结构:
├───java
│ └───...
├───resources
│ └───files
│ ├───file1.txt
│ ├───file2.txt
│ ├───file3.txt
│ └───file4.txt
我正在尝试获取files
目录中的资源。以下是我访问这些文件的方法:
@Autowired
private ResourceLoader resourceLoader;
...
Stream<Path> walk = Files.walk(Paths.get(resourceLoader.getResource("classpath:files/").getURI()));
当文件位于target
目录中时,它可以在本地运行,但当我从JAR文件运行它时,找不到文件。我该如何解决此问题?我已经检查了这些文件确实存在于BOOT-INF/classes/files
下的jar中。
下面是maven如何构建资源并将其复制到MySQL中的(我不希望过滤.txt文件):
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.txt</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<includes>
<include>**/*.txt</include>
</includes>
</resource>
</resources>
3条答案
按热度按时间nbnkbykc1#
你可以尝试用下面的代码来读取文件吗?
这不是您所编写代码的确切解决方案,但它将给予有关要阅读的资源的大纲。
omqzjyyz2#
其他人也遇到了和你一样的问题,他们按照Sambit的建议,通过将ResourceLoader和ResourcePatternResolver结合起来找到了解决方案。在这里看到相同的问题与答案:https://stackoverflow.com/a/49826409/6777695
mgdq6dx13#
下面的示例代码在基于Windows的本地开发环境下读取/加载了配置为rules/文件夹的一部分的Drools文件,该文件夹位于/src/main/resources项目路径下。作为IDE的一部分,而在基于Linux/Unix的生产环境中,则来自应用程序jar。
在本地Windows开发环境中使用 java.lang.ClassLoader.getResource(String name) 方法读取/加载文件的方法,而在基于Linux的生产环境中部署时,使用 org.springframework.core.io.support.ResourcePatternUtils.getResourcePatternResolver(ResourceLoader resourceLoader) returned org.springframework.core.io.support.ResourcePatternResolver.getResources(String locationPattern) 方法从应用程序jar读取/加载文件。
**注意:**如果您在Windows环境下使用命令行执行应用程序jar,则上述示例将不起作用,使用以下命令:
在这种情况下,您需要调用 loadResourcesOfRulesFromJar() 方法,使其在Windows或Linux/Unix环境中工作。
您可以根据自己的需求添加逻辑,以便在本地开发环境和prod环境之间进行切换,或者考虑操作系统类型沿着一些配置机制,以满足开发和部署需求。
Drools配置
静止控制器