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

调用getResourceAsStream()方法出现Null pointer exception问题求助

问题根源

你遇到的NullPointerException触发自loader.setSource()执行逻辑,核心原因是classifier.class.getResourceAsStream("/"+filename)没有找到目标文件,返回了null,CSVLoader接收空输入源就会抛出空指针异常。

排查步骤
  • 先验证文件是否真的能被类加载器找到:在loader.setSource()前添加一行调试代码System.out.println(classifier.class.getResource("/" + filename));,如果控制台输出null即可确认是文件路径匹配失败的问题。
  • 检查编译后的输出目录:普通Java项目编译后.class文件会生成在out/production/classes(IDEA默认路径)下,Maven/Gradle项目默认只会把src/main/resources下的文件复制到类路径,放在src代码目录下的csv文件默认不会被复制到编译输出目录,运行时自然找不到。
  • 核对路径写法:加前缀/代表从类路径根目录开始查找,如果你的csv文件放在某一级包目录下,没有写全相对路径也会返回null。
解决方法

方法1(最推荐,符合Java项目规范)

把dataset.csv移动到项目的资源目录:

  • 普通非构建工具Java项目:把文件放到编译输出的classes根目录下
  • Maven/Gradle项目:把文件放到src/main/resources目录下,构建工具会自动将该目录下的文件同步到类路径根目录,你现有的路径写法可以直接正常运行。

方法2(快速本地调试用)

改用本地文件流读取,不需要走类加载路径:

  1. 把dataset.csv放在项目根目录(和src文件夹平级的位置)
  2. 修改getData方法中的加载代码,替换原有setSource行:
// 先导入java.io.FileInputStream包
loader.setSource(new FileInputStream(filename));
额外注意事项

你现有代码训练分类器的步骤有遗漏:加载完Instances数据集后需要手动指定分类标签的索引,否则后续训练J48模型时还会抛出异常,在loader.getDataSet()之后添加一行代码即可:

dataset.setClassIndex(dataset.numAttributes() - 1);

该行代码代表把数据集的最后一列作为分类标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:15:05