spring boot 读取resources下文件 和 打成jar 读取jar包中配置文件
由于使用spring boot + maven 管理项目,所以会把项目打成jar包来进行运行。在不打成jar的情况下,正常情况一般都是读取绝对路径来进行获取配置文件路径
String url = SensitiveWordInit.class.getResource("/").getFile();
File file = ResourceUtils.getFile("classpath:key.txt");
以上两种方法来获取。但是当项目打包成jar 包时,通过路径获取会出现file:/D:/xxx/xxx.jar!/BOOT-INF/classes!/xx.xx 的错误。
解决办法:
当项目打成jar包时,还需要读取配置文件。需要通过流的形式来进行读取。方法如下
private Set<String> readWordFile() throws Exception{
Set<String> set = null;
// File file = ResourceUtils.getFile("classpath:key.txt");
// System.out.println(file.toString());
// String url = SensitiveWordInit.class.getResource("/").getFile();
// System.out.println("readSensitiveWordFile" + url);
// File file = new File(url+"key.txt"); //读取文件
InputStream inputStream = SensitiveWordInit.class.getResourceAsStream("/key.txt");
InputStreamReader read = new InputStreamReader(inputStream,ENCODING);
try {
set = new HashSet<>();
BufferedReader bufferedReader = new BufferedReader(read);
String txt ;
while((txt = bufferedReader.readLine()) != null){ //读取文件,将文件内容放入到set中
set.add(txt);
}
} catch (Exception e) {
throw e;
}finally{
read.close(); //关闭文件流
}
return set;
}
通过
InputStream inputStream = SensitiveWordInit.class.getResourceAsStream("/key.txt");
来获取classpath 下的key.txt 来进行读取。这样就避免了路径的错误问题。
以上就是读取jar包中的配置文件问题解决办法
使用@Value注解 更简单的方式如下:
SpringBoot
spring boot读取classpath下的json文件
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
使用@Value注解
@Value(value="classpath:default.json")
private Resource resource;
BufferedReader br = new BufferedReader(new InputStreamReader(resource.getInputStream()));
StringBuffer message=new StringBuffer();
String line = null;
while((line = br.readLine()) != null) {
message.append(line);
}
String defaultString=message.toString();
String result=defaultString.replace("\r\n", "").replaceAll(" +", "");
System.out.println(result);