代码之家  ›  专栏  ›  技术社区  ›  Steve Kuo

JAR中的javadesktop.open(filef)参考文件?

  •  7
  • Steve Kuo  · 技术社区  · 16 年前

    这是可能的 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中的资源创建一个临时文件,但不是很优雅。

    4 回复  |  直到 16 年前
        1
  •  6
  •   Joachim Sauer    16 年前

    .jar文件中的“文件”不是操作系统的文件。它们只是.jar文件的一部分,通常是压缩的。操作系统无法将它们作为单独的文件寻址,因此无法以这种方式显示。

    Java本身有一种通过某种URI引用这些文件的简洁方法(正如您通过使用 getResource() )但这完全是Java特有的。

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

    选项1通常通过简单地写入一个临时文件并引用该文件来完成。或者,您可以启动一个小型web服务器,并通过某个URL提供文件。

        2
  •  3
  •   Jon Skeet    16 年前

    jar文件中的资源 不是吗 File

        3
  •  1
  •   oxbow_lakes    16 年前

    但是JAR文件中的条目是 不是 File ! JAR文件是一个文件;它的条目是JAR文件条目(这是显而易见的)。

    文件 为什么不使用 Reader 或 InputStream 封装输入?

        4
  •  0
  •   OscarRyz    16 年前

    不,它不是,因为正如您刚才看到的,您首先没有有效的文件

    从文章中: Using the Desktop API in Java SE 6 我们有

    开放式: 表示由与打开特定文件类型关联的应用程序执行的打开操作

    因此,您必须有一个有效的文件,然后有一个与该文件关联的应用程序,以便操作系统可以打开它。虽然这样的应用程序可能存在,但你仍然必须让它理解你文件的URL。