天天看点

jar包读取配置文件(同目录,jar包内)

问题与背景

在部署的时候,往往部署环境与实际环境有配置的不同,需要改一下外置的配置文件。对于框架中的配置文件,可以很好的进行配置文件外置然后用框架进行读取。但是,基于自己的业务设置的配置文件,一旦打包成jar,就有读取外置和读取jar包中配置文件的问题。

方案与案例

读取jar包外的同目录配置文件

String content = ""; // 文件中的内容
//尝试读取外置
try {
  content = readJsonFile(System.getProperty("user.dir")
      + File.separator
      + "dataResource_out.json");
}catch (IOException exception){
  //同文件路径读取
  log.debug("dataResource.json外置文件读取失败。"+ exception.getMessage());
}
//读取json文件
private String readJsonFile(String fileName) throws FileNotFoundException {
  String jsonStr = "";
  try {
    File jsonFile = new File(fileName);
    FileReader fileReader = new FileReader(jsonFile);
    Reader reader = new InputStreamReader(new FileInputStream(jsonFile),"utf-8");
    int ch = 0;
    StringBuffer sb = new StringBuffer();
    while ((ch = reader.read()) != -1) {
      sb.append((char) ch);
    }
    fileReader.close();
    reader.close();
    jsonStr = sb.toString();
    return jsonStr;
  } catch (FileNotFoundException e) {
    throw e;
  }catch (Exception e){
    e.printStackTrace();
    return null;
  }
}      

读取jar包内配置文件

//内置文件
import org.apache.commons.io.IOUtils;

ClassPathResource resource = new ClassPathResource("dataResource_inner.json");
try {
  content = IOUtils.toString(resource.getInputStream(), StandardCharsets.UTF_8);
}catch (IOException exception){
  log.debug("dataResource_inner.json读取失败!"+exception.getMessage());
}
log.debug("dataResource_inner.json readed");