二维数组读取文本文件动物数据异常:文件存在却提示未找到
兄弟,你遇到的这个“找不到文件”的坑我之前也踩过!明明文件就在那,程序就是看不见,大概率是这几个原因,一个个排查:
文件路径没搞对
你写的new File("animals.txt")是相对路径,程序会从当前工作目录找文件,而这个目录不一定是你放文件的地方!比如在IDEA/Eclipse里,默认工作目录是项目根目录,不是src文件夹。如果你把文件放在src里,得改成"src/animals.txt";要是拿不准,直接用绝对路径,比如Windows下"C:/你的项目路径/animals.txt",mac/Linux下"/Users/你的用户名/项目路径/animals.txt"。文件名偷偷变了
别笑,Windows默认会隐藏已知文件后缀,比如你明明存的是animals.txt,实际可能是animals.txt.txt!去文件夹选项里关掉“隐藏已知文件类型的扩展名”,看看真实文件名是不是拼写错了,比如少个s写成animal.txt。权限不够读不了
有时候文件所在的文件夹被设置了只读,或者系统权限限制程序访问。简单测试:把文件复制到桌面,用绝对路径读取,要是能成功,就是原文件夹权限的问题。
另外,给你两个实用的改进建议:
打印详细异常信息
你现在只提示“could not find file”,但Java的异常栈能告诉你更多细节!把catch块改成这样:try { animals = new Scanner(new File("animals.txt")); // 你的二维数组处理代码 } catch (FileNotFoundException e) { e.printStackTrace(); // 打印完整异常,能看到具体是路径错了还是真的不存在 }用类加载器读取更靠谱
如果你是做Java项目(比如Maven/Gradle),把文件放在src/main/resources目录下,然后用类加载器读取,这样不管项目跑在哪,都能找到文件:try { // 从类路径中获取文件 URL fileUrl = getClass().getResource("/animals.txt"); if (fileUrl != null) { Scanner animals = new Scanner(new File(fileUrl.toURI())); // 接下来处理每行内容,拆分存入二维数组 while (animals.hasNextLine()) { String line = animals.nextLine(); String[] items = line.split(",\\s*"); // 按逗号加可选空格拆分 // 把items存入你的二维数组 } animals.close(); } else { System.out.println("文件不在类路径里哦!"); } } catch (Exception e) { e.printStackTrace(); }
按上面的方法排查,应该就能解决问题啦!
内容的提问来源于stack exchange,提问作者ertyui

