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

Mac环境下访问.yml文件遭遇Stream Closed错误,寻求解决方案

解决Mac环境下读取YAML文件时的Stream Closed错误

可能的原因及对应解决方案

1. 资源路径或classpath配置错误

ClassLoader的getResourceAsStream从classpath根目录查找资源,若src/yml/server.yml未被正确打包到classpath中,会导致流对象为null,后续操作触发异常。

  • Maven项目配置:在pom.xml中添加资源目录配置,将src/yml纳入构建资源:
<build>
    <resources>
        <resource>
            <directory>src/yml</directory>
            <includes>
                <include>**/*.yml</include>
            </includes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
    <!-- 测试环境需额外配置 -->
    <testResources>
        <testResource>
            <directory>src/yml</directory>
            <includes>
                <include>**/*.yml</include>
            </includes>
        </testResource>
    </testResources>
</build>
  • Gradle项目配置:在build.gradle中配置sourceSets:
sourceSets {
    main {
        resources {
            srcDirs += 'src/yml'
        }
    }
    test {
        resources {
            srcDirs += 'src/yml'
        }
    }
}

2. 流未正确检查与管理

原代码未判断流是否为null,且未用try-with-resources自动关闭流,可能导致流提前关闭或空指针引发异常。修正后的代码:

Yaml yaml = new Yaml();
// 使用try-with-resources自动管理流生命周期
try (InputStream ymlReader = this.getClass().getClassLoader().getResourceAsStream("yml/server.yml")) {
    // 先检查流是否存在
    if (ymlReader == null) {
        throw new FileNotFoundException("资源文件 yml/server.yml 未在classpath中找到");
    }
    Map<String, Object> yamlMaps = yaml.load(ymlReader);
    // 修正日志输出格式(原代码缺少占位符)
    LOG.info("Value of Status Flag: {}", yamlMaps.get("status"));
} catch (IOException e) {
    LOG.error("读取YAML文件失败", e);
}

3. Mac环境大小写问题

Mac默认文件系统不区分大小写,但classpath中的资源路径严格区分大小写。检查代码中的路径(如yml/server.yml)与实际文件名是否完全一致(包括大小写,比如是否实际是Server.yml或YML/server.yml)。

4. 文件权限问题(罕见但需排查)

确保当前用户对src/yml/server.yml有读取权限,可通过终端执行以下命令检查:

ls -l src/yml/server.yml

若权限不足,执行:

chmod +r src/yml/server.yml

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 02:15:14