spring boot 读取resources下文件 和 打成jar 读取jar包中配置文件

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 readWordFile() throws Exception{
       Set 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);

你可能感兴趣的:(spring boot 读取resources下文件 和 打成jar 读取jar包中配置文件)