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

Java File IO调用getAbsolutePath()返回路径错误导致文件无法打开

问题原因

new File(String fileName) 使用相对路径寻址时,默认基准路径是Java进程的工作目录,而非当前代码所在的包目录。你当前的项目工作目录为 C:/Zaid/College/CE2336/Programs/,所以直接传入文件名会默认在工作目录下查找,不会自动拼接代码所在的包路径 MyImplementations,因此拿到的路径少了一层包结构。

小提示:你原有代码中替换路径斜杠的逻辑不是必须的,Java的File类在Windows环境下可以自动兼容 / 和 \ 两种斜杠格式。


解决方案

方案1:拼接包路径前缀(快速适配现有代码)

如果文件固定存放在MyImplementations包下,直接把包名作为路径前缀拼到文件名前即可:

text = new MyArrayList<>();
// 拼接包名作为相对路径前缀
String filePath = new File("MyImplementations/" + fileName).getAbsolutePath();
try {
  Scanner s = new Scanner(new File(filePath));
  while (s.hasNext()) {
    text.add(s.next());
  }
  s.close();
} catch(FileNotFoundException e){
  System.out.println("File not found.");
}

方案2:通过类加载器读取同包资源(更稳定)

如果文件和当前类在同一个包下,用类加载器读取资源不受工作目录变动影响,适配性更强:

text = new MyArrayList<>();
// 替换下面的「当前类名」为你这段代码所在的类的名称
InputStream inputStream = 当前类名.class.getResourceAsStream("File.txt");
if (inputStream == null) {
    System.out.println("File not found.");
    return;
}
// 用try-with-resources自动关闭流,不用手动写close逻辑
try (Scanner s = new Scanner(inputStream)) {
    while (s.hasNext()) {
        text.add(s.next());
    }
}

方案3:显式传入绝对路径(适合固定部署场景)

如果文件存放位置可变,可以直接把文件的完整绝对路径作为参数传入程序,不需要依赖相对路径寻址逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:15:04