Java:从文件系统加载资源
我的项目设置 我有以下项目设置:Java:从文件系统加载资源,java,file-io,resources,Java,File Io,Resources,我的项目设置 我有以下项目设置: \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\bi
\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
APP\u HOME
目录,例如MAVEN\u HOME
,将其注册并将您的文件称为File
-$APP\u HOME/File.ext
(使用System.getenv()
)你真的应该把你的资源包括在你的罐子里 如果做不到这一点,您可以解析出主类资源的绝对路径。假设您的主类实际上被称为“Main”:
正如Nelson提到的,用JAR打包它们(只需将它们与.class文件一起复制),然后您就可以通过一个简单的
this.getClass().getClassLoder().getResource(“images/foo.png”)
找到它们。您需要添加一个描述类路径的参数。应该看起来像
java -cp c:\projects\program_dir\bin -jar program.jar
这将把您的jar和映像放在类路径上,它将成功加载。+1利用类路径加载静态资源。另请参见:,这实际上是false():
-jar使用此选项时,jar文件是所有用户类的源,其他用户类路径设置将被忽略。
java -cp c:\projects\program_dir\bin -jar program.jar