Java:从文件系统加载资源
我的项目设置
我有以下项目设置:
\program.jar \images\logo.png
在我的代码中,我使用相对URL "images/logo.png"
引用图像。
问题
如果我在目录中使用以下命令运行此程序:
c:\projects\program_dir\bin\>java -jar program.jar
然后一切正常,Java能够找到图像。
现在,我的问题是,我需要能够从不同的目录运行该程序。
c:\>java -jar c:\projects\program_dir\bin\program.jar
程序已执行,但现在所有相对URL都不再有效。
我需要的
如何计算program.jar文件的执行主页,以便我可以将相对URL更改为绝对URL?
如果可能的话,我会做的是将你的图像包装在你的jar子里。
这样您就不必担心Jar的启动位置了。
然后,您需要加载类似于以下内容的图像:
InputStream stream = this.getClass().getClassLoader(). getResourceAsStream("/images/logo.png");
您应该在JAR中包含您的资源。
如果失败,您可以解析Main类资源的绝对路径。 假设您的Main类实际上被称为“Main”:
Main.class.getResource("Main.class").getPath();
资源必须位于类路径中。 您可以尝试以下方法之一:
- 将图像放入
program.jar
。 - 像大多数程序一样,它们有一个
APP_HOME
目录,例如MAVEN_HOME
,注册它并将您的文件称为File
–$APP_HOME/the-file.ext
(使用System.getenv()
)。
正如Nelson所提到的,用JAR打包它们(只需将它们与你的.class文件一起复制),然后你可以通过一个简单的this.getClass().getClassLoder().getResource("images/foo.png")
找到它们。
您需要添加一个描述类路径的参数。 应该看起来像
java -cp c:\projects\program_dir\bin -jar program.jar
这将把你的jar和图像放在类路径上,它将成功加载。