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

如何在Eclipse中读取导出Jar包内存储的PNG文件

解决Jar包内资源文件读取失败的问题

核心问题分析

你的代码里使用File.separator拼接路径是导致Jar包读取失败的关键原因。Jar内部的资源路径是基于classpath的统一路径格式,只能用正斜杠/作为分隔符,和操作系统的文件分隔符无关。在Windows环境下File.separator是反斜杠\,生成的路径在Jar里完全无法被识别,而IDE里因为是直接读取文件系统的文件,所以反斜杠也能正常工作。

修改后的ResourceLoader类

把File.separator替换为统一的正斜杠,并调整路径尝试逻辑:

public final class ResourceLoader {

    public static InputStream load(String path) {
        // 优先尝试从classpath根目录开始的绝对路径
        InputStream input = ResourceLoader.class.getResourceAsStream("/" + path);
        if (input == null) {
            // 再尝试相对于当前类所在包的相对路径
            input = ResourceLoader.class.getResourceAsStream(path);
        }
        return input;
    }

}

正确的调用方式

你的PNG文件存放在src/res/textures下,编译后res目录下的内容会被复制到classpath根目录,所以textures文件夹直接处于classpath根下。调用时传入相对classpath根的路径即可:

// 示例:读取textures目录下的player.png
InputStream imgStream = ResourceLoader.load("textures/player.png");

额外注意事项

  • 打包时确保资源被包含:导出可运行Jar包时,要检查IDE的打包配置,确保textures文件夹及其中的PNG文件被正确打包进Jar;如果用Maven/Gradle等构建工具,需将res目录配置为资源目录,打包时会自动将资源复制到classpath。
  • 不要用文件系统方式读取:Jar内的资源不是独立的文件系统文件,不能用new File()这类方式读取,必须通过流的形式读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 22:58:25