【问题标题】:Opening a PDF file that is packaged in a JAR打开打包在 JAR 中的 PDF 文件
【发布时间】:2014-05-15 18:03:20
【问题描述】:

我正在尝试打开一个在运行时打包到 jar 文件中的 PDF 文件。基本思想是用户单击帮助选项,然后显示一个 PDF 帮助文件。现在我在 linefit 包的 LineFit.class 中有这个来尝试打开帮助 PDF:

try {
  File test = new File(LineFit.class.getClass().getResource("/linefit/helpTest.pdf").toURI());
  try {
      Desktop.getDesktop().open(test);
  } catch (IOException e1) {
      // TODO Auto-generated catch block
      e1.printStackTrace();
  } 
} catch (URISyntaxException e2) {
  // TODO Auto-generated catch block
  e2.printStackTrace();
}

当我运行它时它在 eclipse 中工作,但是如果我尝试将它导出到一个可运行的 JAR 文件,它不会打开 PDF 文件,当我查看 JAR 时,PDF 与它在同一个文件夹中日食。

【问题讨论】:

    标签: java eclipse pdf jar


    【解决方案1】:

    new File(URI) 仅适用于 file: URI。当类加载器在 jar 中找到资源时,它会返回一个 jar URI,例如 jar:file:/C:/Program%20Files/test.jar!/foo/bar

    基本上,File 类用于文件系统上的文件。您不能使用它来表示 JAR 或其他存档中的文件。您必须将文件从 jar 复制到常规文件中,然后创建一个 File 引用这个新文件。要从 jar 中读取文件,您可以使用 JarURLConnection.getInputStream 和您拥有的 URL,或者您可以调用 ClassLoader.getResourceAsStream

    【讨论】:

      【解决方案2】:

      试试这个:

      使用MethodHandles.lookup().lookupClass().getClassLoader()时请确保pdf文件的路径为相对路径

      InputStream is = MethodHandles.lookup().lookupClass().getClassLoader().getResourceAsStream("doc/example.pdf");
      BufferedReader br = new BufferedReader(new InputStreamReader(is));
      while ((thisLine = br.readLine()) != null) {
                  System.out.println(thisLine);
               } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-28
        • 1970-01-01
        • 2011-10-17
        • 2014-03-10
        相关资源
        最近更新 更多