JAR中的Java Desktop.open(File f)引用文件?

Ste*_*Kuo 7 java desktop jar

它可以用于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()));
Run Code Online (Sandbox Code Playgroud)

可能性是JavaRanch的答案,即从JAR中的资源创建一个临时文件 - 不是很优雅.

这是在Windows XP上运行的.

Joa*_*uer 6

.jar文件中的"文件"不是操作系统的文件.它们只是.jar文件的某个区域,通常是压缩的.它们不能被OS作为单独的文件寻址,因此不能以这种方式显示.

Java本身有一种简洁的方式来通过某些URI引用这些文件(正如您通过使用实现的那样getResource()),但这完全是Java特定的.

如果您希望某个外部应用程序访问该文件,您有两种可能的解决方案:

  1. 提供一些标准化的方式来访问文件或
  2. 使应用程序能够处理打包在.jar(或.zip)文件中的文件.

通常2不是一个真正的选项(除非另一个应用程序也是用Java编写的,在这种情况下它很容易).

选项1通常只需写入临时文件并参考即可.或者,您可以启动一个小型Web服务器并通过某个URL提供该文件.