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

读取.csv文件提示找不到指定文件,此前正常现求助排查

解决CSV文件读取时的文件找不到问题

嘿,我一眼就看到了两个关键问题——一个是导致你"找不到文件"的核心原因,另一个是代码里藏着的解析bug,给你拆解清楚:

1. 文件路径的坑(找不到文件的根源)

你把data.csv放在了项目的src文件夹里,但代码里new File("data.csv")是从项目根目录开始找文件的(就是和src同级的那个文件夹,不是src内部)。之前可能你误打误撞把文件放在了根目录,现在移到src就找不到了。

解决办法二选一:

  • 最简单的:把data.csv从src里拖出来,放到项目根目录下(比如你的项目叫CSVTest,就放在CSVTest/下面,不是CSVTest/src/)
  • 更规范的(适合大型项目):如果要把文件放在src里,用类加载器读取classpath下的资源,代码改成这样:
// 替换原来的File file = new File(fileName);
File file = new File(Main.class.getResource("/data.csv").getFile());

或者更稳妥的用InputStream(避免路径编码问题):

// 替换原来的Scanner inputStream = new Scanner(file);
InputStream inputStream = Main.class.getResourceAsStream("/data.csv");
Scanner inputStream = new Scanner(inputStream);

2. 代码里的解析bug(现在没报错,但迟早会出问题)

你的代码里用了inputStream.next(),这个方法是按空格分割读取内容的,不是读取整行!比如你的CSV内容如果是每行一个商品条目,next()会把空格当分隔符,导致你读不到完整的行,split之后数组会出现越界或者数据错乱的问题。

应该改成用nextLine()来读取整行:

// 忽略第一行
inputStream.nextLine(); 
while(inputStream.hasNextLine()) {
    String data = inputStream.nextLine(); // 读取完整的一行
    String[] values = data.split(",");
    // 后面的代码不变
}

另外检查下你的CSV格式,你粘贴的内容看起来是所有条目挤在一行了,正确的格式应该是每行一个商品,比如:

Name,Quantity,Price
Tea,100,2.50
Coke,50,2.50
Lays,32,1.00
Cheetos,34,1.10
Snickers,30,1.25
Butterfinger,70,1.50
Five,40,0.75
Orbits,50,0.90

先把路径问题解决,应该就能找到文件了,再把Scanner的读取方式改对,解析就不会出错啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:40:52