天天看点

jar包读取配置文件(同目录,jar包内)问题与背景方案与案例

问题与背景

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

方案与案例

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

方案是利用java的system对象获得目录,然后指定文件即可。

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包内配置文件

这里有个坑,就是一旦打包成jar之后,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");