读取.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
相关产品推荐
相关产品推荐

