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

如何在运行JAR包时从资源文件夹加载文件路径

解决Java资源文件加载路径错误的问题

为什么你的方法会失效

  • 硬编码src/resource/filename完全不可靠:IDE运行时项目结构里的src目录存在,但打包成JAR后,这个目录根本不会被包含进去,路径直接失效。
  • classLoader.getResource(fileName).getFile()的问题:当资源在JAR包内时,getResource()返回的URL格式是jar:file:/xxx/your.jar!/resource/filename,调用getFile()得到的是这个URL的字符串形式,并不是文件系统中真实的文件路径,自然无法通过文件路径访问资源。

正确的资源加载方式

不要试图获取资源的文件路径,直接通过输入流读取资源内容才是通用方案(无论IDE运行还是打包成JAR都能正常工作):

方式1:使用ClassLoader获取输入流

// fileName是资源文件名,比如"test.txt"或"config/app.properties"
try (InputStream inputStream = getClass().getClassLoader().getResourceAsStream(fileName)) {
    if (inputStream == null) {
        throw new RuntimeException("未找到资源文件:" + fileName);
    }
    // 读取资源内容,示例转为UTF-8字符串
    String content = new String(inputStream.readAllBytes(), StandardCharsets.UTF_8);
    // 这里处理资源内容
} catch (IOException e) {
    e.printStackTrace();
}

方式2:使用当前类直接获取输入流

如果资源路径是相对于当前类的包结构,或者用/开头表示资源根目录:

// 用/开头表示从资源根目录查找
try (InputStream inputStream = getClass().getResourceAsStream("/" + fileName)) {
    // 后续处理同上
}

注意事项

  • Maven/Gradle项目中,资源文件务必放在src/main/resources目录下,打包时会自动被纳入JAR包的资源路径中。
  • 资源文件名要对应正确的路径:比如资源在resources/data/logs.csv,则fileName应写data/logs.csv。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 06:30:02