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

Java读取文件遇系统找不到路径错误,咨询路径配置问题

解决相对路径找不到文件的问题

首先,咱们来拆解一下你的路径问题:

你的Java文件位于C:\University\BigDataManagement\Data-Mining\hw1\src\main\java\univ\bigdata\course\MoviesReviewsQueryRunner.java,而目标资源文件在C:\University\BigDataManagement\Data-Mining\hw1\src\main\resources\movies-sample.txt。

你用的相对路径../../../../../resources/movies-sample.txt多往上走了一层,导致系统找不到路径。咱们数一下层级:

  • 从MoviesReviewsQueryRunner.java所在的course目录出发,往上走4层就能到main目录(course → bigdata → univ → java → main),然后从main进入resources目录即可。所以正确的相对路径应该是:
    File file = new File("../../../../resources/movies-sample.txt");
    

不过,这里更推荐你用类加载器读取资源文件的方式,因为这种方式不受运行时工作目录的影响,而且在项目打包成JAR后依然能正常工作(直接用File类的相对路径在打包后会失效)。具体代码如下:

// 非静态方法中使用
try (InputStream inputStream = getClass().getResourceAsStream("/movies-sample.txt");
     BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) {
    String line;
    while ((line = br.readLine()) != null) {
        // 处理每一行数据
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

// 如果是静态方法,改用类名获取资源
try (InputStream inputStream = MoviesReviewsQueryRunner.class.getResourceAsStream("/movies-sample.txt");
     BufferedReader br = new BufferedReader(new InputStreamReader(inputStream))) {
    // 同样的处理逻辑
} catch (IOException e) {
    e.printStackTrace();
}

为什么推荐这种方式?因为src/main/resources目录下的文件在编译和打包后,会被放到类路径(classpath)的根目录下,用getResourceAsStream("/movies-sample.txt")就能直接定位到它,不用再纠结相对路径的层级问题。

如果一定要用File类的绝对路径测试,也可以直接写死路径,但这种方式不适合跨环境部署:

File file = new File("C:\\University\\BigDataManagement\\Data-Mining\\hw1\\src\\main\\resources\\movies-sample.txt");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 10:10:45