spring项目中读取resources下的文件
spring项目中读取resources下的文件
我们都知道,spring项目经过maven打包后,可以打成jar包或可解压的war包
a. war包是需要外置的web容器去运行的,是需要先解压的
b. jar包的项目通常是内置的web容器(比如spring boot项目),运行的时候并不会对jar包进行解压操作
所以以上两种项目,在解析resources下的文件的时候会有些不同
一、war包的项目(采用外置web容器运行)
由于war包的项目在运行之前会被解压,解压后resources下的文件是真实存在在磁盘上的一个文件,
所以可以获取它的File对象和Inputstream流
例:
当前project工程的resouces目录
config.txt文件内容
phone=19198811100
username=yanchuanbin
可以通过spring提供的ResourceUtils工具或ClassPathResource方式进行读取
//第一种,通过 org.springframework.util.ResourceUtils 工具类
File file = ResourceUtils.getFile("classpath:config.txt");
//第二种,通过org.springframework.core.io.ClassPathResource 去进行读取
ClassPathResource classPathResource = new ClassPathResource("config.txt");
File file1 = classPathResource.getFile();
InputStream inputStream = classPathResource.getInputStream();
二、jar包的项目(采用内嵌的web容器运行)
由于jar包的项目通常是内嵌容器运行的,所以在运行的时候,服务器上并不会存在一个单独的Resource资源文件
这时候通过ClassPathResource的方式去获取,只能获取它的一个inputstream流,并不能获取到它的File对象
代码
ClassPathResource classPathResource = new ClassPathResource("config.txt");
Properties properties = new Properties();
properties.load(classPathResource.getInputStream());
//通过spring中 PropertiesLoaderUtils 工具类也可以将file或inputstream转成Properties对象
// Properties properties = PropertiesLoaderUtils.loadProperties(classPathResource);
//打印显示出来
properties.list(System.out);
服务器上运行jar项目
java -jar resources-test.jar
输出显示
- listing properties --
phone=19198811100
username=yanchuanbin
说明打成jar包后,能够访问资源文件里面的内容
由于在打成jar包的时候,maven会对project进行编译处理,可能会将resouces的下的静态资源文件打包成乱码
可以配置一个maven-resources-plugin插件对指定的资源文件进行过虑
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>txt</nonFilteredFileExtension>
<nonFilteredFileExtension>config</nonFilteredFileExtension>
<nonFilteredFileExtension>properties</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>