使用Java Scanner读取CSV文件失败且无异常抛出,求修复方案
Java读取CSV文件无输出无异常的修复方案
问题重现
用户使用以下Java代码读取CSV文件时,程序无输出且未抛出异常,但此前读取bds文件正常:
import java.util.*; import java.io.File; import java.io.FileNotFoundException; class Flight { public static void main(String[] args) throws Exception { Flight x = new Flight(); x.data(); } public void data() throws Exception { File fn = new File("ChinaAirLine.csv"); Scanner obj = new Scanner(fn); while (obj.hasNextLine()) { System.out.println(obj.nextLine()); } obj.close(); } }
修复方案
1. 确认文件路径正确性
- 相对路径
"ChinaAirLine.csv"指向程序运行的工作目录(非源码目录),可通过以下代码打印实际路径,验证文件是否存在:System.out.println(new File("ChinaAirLine.csv").getAbsolutePath()); - 若文件不在工作目录,改用绝对路径,例如:
File fn = new File("D:/your-project-path/ChinaAirLine.csv");
2. 指定文件编码
Scanner默认使用平台编码,若CSV文件编码(如UTF-8、GBK)与平台编码不一致,会导致读取异常或无输出。修改Scanner初始化代码,指定对应编码:
Scanner obj = new Scanner(fn, "UTF-8"); // 替换为文件实际编码
3. 完善异常捕获
原代码直接抛出异常,若运行环境未输出异常信息,无法排查问题。改为手动捕获并打印详细错误:
public void data() { try { File fn = new File("ChinaAirLine.csv"); Scanner obj = new Scanner(fn, "UTF-8"); if (!obj.hasNextLine()) { System.out.println("文件为空或无有效内容"); } while (obj.hasNextLine()) { System.out.println(obj.nextLine()); } obj.close(); } catch (FileNotFoundException e) { System.err.println("错误:文件未找到 - " + e.getMessage()); e.printStackTrace(); } catch (Exception e) { System.err.println("错误:读取失败 - " + e.getMessage()); e.printStackTrace(); } }
4. 检查文件本身
手动打开ChinaAirLine.csv,确认文件不为空、无损坏,且包含可读取的文本内容。
修改后的完整代码
import java.util.*; import java.io.File; import java.io.FileNotFoundException; class Flight { public static void main(String[] args) { Flight x = new Flight(); x.data(); } public void data() { try { File fn = new File("ChinaAirLine.csv"); // 打印文件绝对路径,验证位置是否正确 System.out.println("文件路径:" + fn.getAbsolutePath()); Scanner obj = new Scanner(fn, "UTF-8"); if (!obj.hasNextLine()) { System.out.println("提示:文件为空或无有效行"); } while (obj.hasNextLine()) { System.out.println(obj.nextLine()); } obj.close(); } catch (FileNotFoundException e) { System.err.println("错误:文件未找到 - " + e.getMessage()); e.printStackTrace(); } catch (Exception e) { System.err.println("错误:读取失败 - " + e.getMessage()); e.printStackTrace(); } } }
内容的提问来源于stack exchange,提问作者黃祥瑋
相关产品推荐
相关产品推荐

