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