Desktop.open(File f)
可以引用位于JAR中的文件吗?
我尝试使用ClassLoader.getResource(String s)
,将其转换为URI,然后从中创建文件。但这导致IllegalArgumentException: URI is not hierarchical
。
URL url = ClassLoader.getSystemClassLoader().getResource(...);
System.out.println("url=" + url); // url is valid
Desktop.getDesktop().open(new File(url.toURI()));
可能性是the answer at JavaRanch,这是从JAR中的资源创建一个临时文件 - 不是很优雅。
这是在Windows XP上运行。
答案 0 :(得分:6)
Java本身有一种巧妙的方式来通过某些URI引用这些文件(正如您通过使用getResource()
实现的那样),但这完全是特定于Java的。
如果您希望某个外部应用程序访问该文件,您有两种可能的解决方案:
通常2不是一个真正的选项(除非另一个应用程序也是用Java编写的,在这种情况下它很容易)。
选项1通常只需写入临时文件并参考即可。或者,您可以启动一个小型Web服务器并通过某个URL提供该文件。
答案 1 :(得分:3)
jar文件中的资源只是不是文件 - 所以你不能使用File
来获取它。如果您正在使用真正需要文件的内容,您确实必须创建一个临时文件并将其打开。
答案 2 :(得分:1)
但是JAR文件中的条目不是File
! JAR文件是一个文件;它的条目是JAR文件条目(显而易见)。
Java包含的抽象意味着您不一定需要使用File
- 为什么不使用Reader
或InputStream
来封装输入?
答案 3 :(得分:0)
不,事实并非如此,因为您只是见证了首先没有有效的文件
来自文章:Using the Desktop API in Java SE 6我们得到了
OPEN: 表示与打开特定文件类型相关联的应用程序执行的打开操作
因此,您必须拥有一个有效的文件,然后将该应用程序与该文件关联,以便操作系统可以打开它。虽然可能存在此类应用,但您仍需要让它了解您文件的网址。