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

Java项目编译后无法读取CSV文件问题求助

Java项目编译后无法读取CSV文件问题求助

兄弟,我一眼就看出问题出在相对路径的工作目录差异上,咱们慢慢捋清楚:

为什么VSCode里能正常运行?

VSCode默认会把你的项目根目录(也就是AIR-QUALITY-PROJECT文件夹)作为程序运行的工作目录,所以你写的AIR-QUALITY-PROJECT/lib/1year.csv这个路径,在VSCode里能精准找到对应的文件——毕竟从项目根出发,这个路径是真实存在的。

为什么终端运行就报错?

你说你是在src目录下执行java App命令,这时候程序的工作目录变成了src文件夹!这时候再找AIR-QUALITY-PROJECT/lib/1year.csv,相当于从src目录往上找不存在的AIR-QUALITY-PROJECT文件夹,自然就抛出FileNotFoundException了。

给你几个靠谱的解决方案:

方案1:调整终端的工作目录(最简单临时解决)

别在src目录下运行命令,先切换到你的项目根目录AIR-QUALITY-PROJECT,再运行编译好的App类。比如:

cd /path/to/AIR-QUALITY-PROJECT
java src/App

(如果编译后的class文件在bin这类专门的目录,就改成java bin/App)

方案2:使用相对项目根的短路径(简化硬编码)

把路径改成相对项目根的简洁写法:

private static final String PATH = "lib/1year.csv";

然后确保运行程序时工作目录是项目根目录,这样不管在VSCode还是终端(切换到根目录后)都能正常读取。

方案3:用类加载器读取资源(最推荐,适配所有场景)

硬编码路径很容易出问题,尤其是打包成jar之后麻烦更多。最好把lib文件夹当成资源目录,用Java的类加载器来读取文件:

  1. 确保lib目录在你的类路径里(VSCode默认会把项目根下的文件夹加入类路径)
  2. 修改读取代码,把FileInputStream换成类加载器的流:
// 替换原来的FileInputStream初始化代码
InputStream inputStream = DataHandler.class.getResourceAsStream("/lib/1year.csv");
if (inputStream == null) {
    throw new FileNotFoundException("找不到资源文件lib/1year.csv");
}
// 后续用inputStream读取内容,比如用BufferedReader包装
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));

这种方式不管你是在VSCode运行、终端运行,还是打包成jar,只要资源在类路径里,都能正确读取,彻底解决路径适配问题。

额外提醒:

你之前把CSV放到根目录、src目录都没用,是因为你硬编码的路径还是AIR-QUALITY-PROJECT/lib/1year.csv,不管文件移到哪,这个路径都不匹配,所以才一直报错。

备注:内容来源于stack exchange,提问作者lordrisser93

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:49:52