You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何实现优先加载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);
        }
    }
}

关键说明

  1. 外部文件优先级:先通过File对象检查Jar同目录下的目标配置文件是否存在且可读,满足条件则优先加载外部文件;
  2. Jar内配置兜底:外部文件不存在时,才从类加载器加载Jar包内的默认配置,同时增加了inputStream == null的判断,避免空指针异常;
  3. 路径一致性:确保你的save方法保存配置时,使用的是和load方法相同的filePath(即new File(filePath)),这样修改后的配置文件路径和加载逻辑完全对应。

内容的提问来源于stack exchange,提问作者Tiiita

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 22:17:09