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

Java Maven项目中相对路径失效但绝对路径可用的问题

解决Java中相对路径读取资源文件失效的问题

问题原因

你用FileReader读取文件时,相对路径是基于JVM启动的当前工作目录,而非源码文件所在的目录。比如在IDE中运行时,工作目录通常是项目根目录,但直接写"data.csv"或"src/main/resources/data.csv"的话,一旦项目打包成Jar包,resources目录下的文件会被嵌入Jar内部,此时FileReader无法访问Jar中的资源,绝对路径自然也就只能在特定环境下生效。

正确解决方案(推荐)

由于你的data.csv放在src/main/resources目录下,这是Maven/Gradle项目的标准资源目录,编译后该目录下的文件会被放到Classpath的根目录中。因此应该用ClassLoader读取Classpath资源,这种方式在IDE运行和Jar包运行时都能正常工作。

修改后的Utils.java代码:

package org.example;

import org.example.model.Stats;

import java.io.*;
import java.util.ArrayList;
import java.util.List;

public class Utils {
    // 直接使用Classpath根目录下的资源名,无需绝对路径
    private static final String RESOURCE_NAME = "data.csv";

    public static List<Stats> readData() {
        List<Stats> statsList = new ArrayList<>();
        // 通过ClassLoader获取资源输入流
        try (BufferedReader br = new BufferedReader(
                new InputStreamReader(Utils.class.getClassLoader().getResourceAsStream(RESOURCE_NAME)))
        ) {
            if (br == null) {
                System.out.println("Error: 未找到资源文件 " + RESOURCE_NAME);
                return statsList;
            }
            String line;
            while ((line = br.readLine()) != null) {
                String[] fields = line.split(",");

                Stats stats = new Stats();
                stats.setName(fields[0]);
                stats.setAddress(fields[1]);
                stats.setContact(fields[2]);
                stats.setAbout(fields[3]);

                statsList.add(stats);
            }
        } catch (IOException e) {
            System.out.println("读取文件出错: " + e.getMessage());
        }
        return statsList;
    }
}

临时调试方案(仅IDE中可用,不推荐用于生产)

如果只是在IDE中临时测试相对路径,路径需要相对于项目根目录,即:

private static final String FILE_PATH = "src/main/resources/data.csv";

但这种方式在打包成Jar后会彻底失效,因为Jar包内不存在这个文件系统路径,因此不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:50:22