动态访问Jar文件中的图像文件

时间:2015-05-14 09:07:37

标签: java html jar

我有一个Java项目,导出为JAR文件(桌面应用程序),它生成一个HTML文件作为输出。输出html文件需要读取一个图像文件,作为页面的标识。 JAR应用程序将位于X文件夹中。目标html文件将动态放置在任何位置。如何使html位于JAR文件中,位于其他位置,访问图像。

简而言之,对于上述情况,我如何确定以下代码的路径。

java.net.URL url = getClass().getResource("image.jpg");
fw.write("<tr><td><b>"+csname+"</b></td><td> <img src = "+url.toString()+"'>/td></tr>");
当我在eclipse中运行时,

工作正常。但是当导出为JAR时则不会 生成的html文件,在某些其他文件夹中有代码

<img src="rsrc:com/demo/dirapitoword/image.jpg">

2 个答案:

答案 0 :(得分:1)

您只需要read the image as a stream from the classpath,例如:

InputStream in = getClass().getResourceAsStream("image.jpg");

并将流作为文件写入磁盘上的已知位置。有lots of ways to do this,如果您使用的是Java 7或更高版本,请尝试:

File out = new File("image.jpg");
Files.copy(in, out.toPath());

然后,您的src属性可以使用您选择的相对位置在HTML中显示此图像,而无需担心浏览器/客户端中的Jar兼容性。

答案 1 :(得分:0)

您可以发现.zip容器存在jar: URI方案,如维基百科中所述http://en.wikipedia.org/wiki/URI_scheme

格式为:

jar:<url>!/[<entry>]

但是所有浏览器(实际上只有Firefox)都不支持它,如本文所述:https://code.google.com/p/browsersec/wiki/Part1

即使在这种情况下,我认为输出.html可能在其他地方但包含资源的绝对路径并不是很好。

我建议使用data: URI方案,该方案允许将图像嵌入HTML页面。

有一个问题涉及此程序:How to display Base64 images in HTML?

在其中一个答案中,这里有一个有趣的小提琴样本:http://jsfiddle.net/hpP45/