繁体   English   中英

打开打包在 JAR 中的 PDF 文件

[英]Opening a PDF file that is packaged in a JAR

我正在尝试打开一个在运行时打包到 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 与它在 eclipse 中时位于同一文件夹中。

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

从根本上说, File类用于文件系统上的文件。 您不能使用它来表示 JAR 或其他存档中的文件。 你将不得不将文件复制出来的罐子,并成为一个普通的文件,然后创建一个File引用这个新文件。 要从 jar 中读取文件,您可以将JarURLConnection.getInputStream与您拥有的 URL 一起使用,或者您可以调用ClassLoader.getResourceAsStream

尝试这个:

使用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);
         } 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM