java项目读取resources下资源文件那点事儿

有时候项目需要一些文件才可以正常运行,最近就有一个这样的项目,需要读取公钥进行加密,读取私钥进行解密,那么如何读取这些文件呢?

0. 最简单的方式

最先想到的就是把文件放在服务器上,并记录存放路径,把路径写在配置文件中,项目运行时从配置文件中的路径读取文件。

这样做固然可行,但是对需要交付给不同客户的项目来说会有几个问题:

  1. 增加了项目交付步骤,交付人员每次多了存放文件并记录、修改配置的步骤;
  2. 人工操作使得失误几率增大,如果路径配置出错,那么会导致项目运行报错。

综上,还是选择将文件放在resources目录下,整体打成jar包或war交付给客户。

1. SpringBoot读取资源文件的方式

这里推荐一篇文章:Java项目读取resources资源文件路径那点事

这篇文章的内容这里就不再赘述,参考着这篇文章,本人使用了其中提到的:

1
InputStream in = this.getClass().getResourceAsStream("/key/keystore.keystore");

使用流的方式,读取到了文件。

2. 重点注意事项

但是此时遇到了一个问题,加解密老是失败,报密钥不对,经一些列调查后发现,原来的resources文件夹下为了配置使用多环境,在maven的pom.xml中将<filtering>设置为了true,以使得资源文件被复制到目标目录的同时,可以替换其中的标识符。但是这样一来,就将密钥文件也进行了修改,所以需要在pom.xml中加入以下修改:

1
2
3
4
5
6
7
8
9
10
11
12
13
<build>  
……
<resources>
……
<resource>
<directory>src/main/resources</directory>
<includes>
<include>key/**</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>

resources/key目录下的文件不进行替换。

至此,运行成功撒花🎉