如何实现优先加载Jar同目录配置文件,不存在时再加载Jar内文件?
解决方案
修改你的load方法,实现优先加载Jar同目录的外部配置文件,不存在时再加载Jar包内默认配置的逻辑,代码如下:
public void load(String filePath) throws IOException { // 检查Jar同目录的外部配置文件 File externalConfig = new File(filePath); String fileExtension = getFileExtension(filePath); if (externalConfig.exists() && externalConfig.isFile() && externalConfig.canRead()) { // 加载外部配置文件 try (FileInputStream fis = new FileInputStream(externalConfig)) { if (fileExtension.equals("yml") || fileExtension.equals("yaml")) { loadYaml(fis, config, ""); } else { loadPlainText(fis); } } } else { // 外部文件不存在,加载Jar包内的默认配置 ClassLoader classLoader = getClass().getClassLoader(); InputStream inputStream = classLoader.getResourceAsStream(filePath); if (inputStream == null) { throw new FileNotFoundException("Jar包内未找到配置文件: " + filePath); } if (fileExtension.equals("yml") || fileExtension.equals("yaml")) { loadYaml(inputStream, config, ""); } else { loadPlainText(inputStream); } } }
关键说明
- 外部文件优先级:先通过
File对象检查Jar同目录下的目标配置文件是否存在且可读,满足条件则优先加载外部文件; - Jar内配置兜底:外部文件不存在时,才从类加载器加载Jar包内的默认配置,同时增加了
inputStream == null的判断,避免空指针异常; - 路径一致性:确保你的
save方法保存配置时,使用的是和load方法相同的filePath(即new File(filePath)),这样修改后的配置文件路径和加载逻辑完全对应。
内容的提问来源于stack exchange,提问作者Tiiita
相关产品推荐
相关产品推荐

