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

Access image file inside a Jar file dynamically

我有一个 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">

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

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

并将流作为文件写入磁盘上的已知位置。有lots of ways to do this,如果你用的是Java7以上,试试:

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

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

您可以发现 jar: URI 方案存在于 .zip 容器中,如维基百科此处所述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?

其中一个答案中有一个有趣的 fiddle 示例:http://jsfiddle.net/hpP45/