Java:从文件系统加载资源

时间:2010-07-22 12:55:46

标签: java file-io resources

我的项目设置

我有以下项目设置:

\program.jar  
\images\logo.png

在我的代码中,我使用相对网址"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?

5 个答案:

答案 0 :(得分:9)

如果可能的话,我会做的是用你的罐装你的图像。

这样你就不用担心你的Jar从哪里发射了。

然后您需要加载类似于以下内容的图像:

InputStream stream = this.getClass().getClassLoader().
                                     getResourceAsStream("/images/logo.png");

答案 1 :(得分:1)

您确实应该将资源包含在JAR中。

如果失败,您可以解析Main类资源的绝对路径。假设您的Main类实际上被称为“Main”:

Main.class.getResource("Main.class").getPath();

答案 2 :(得分:0)

资源必须位于类路径中。您可以尝试以下方法之一:

  1. 将图像放入program.jar
  2. 与大多数程序一样,它们有一个APP_HOME目录,例如MAVEN_HOME,注册并将您的文件引用为File - $APP_HOME/the-file.extSystem.getenv())。

答案 3 :(得分:0)

正如Nelson所说,用JAR打包它们(只需将它们与你的.class文件一起复制),然后你可以通过简单的this.getClass().getClassLoder().getResource("images/foo.png")找到它们。

答案 4 :(得分:0)

您需要添加一个描述您的类路径的参数。应该看起来像

java -cp c:\projects\program_dir\bin -jar program.jar

这会将你的jar和图像放在类路径上,它会成功加载。