我正在尝试打开在运行时打包到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与它在的时间位于同一个文件夹中蚀。
答案 0 :(得分:0)
new File(URI)
仅适用于file:
个URI。当类加载器在jar中找到资源时,它会返回jar
URI,例如jar:file:/C:/Program%20Files/test.jar!/foo/bar
。
从根本上说,File
类适用于文件系统上的文件。您不能使用它来表示JAR或其他存档中的文件。您将不得不将文件从jar中复制到常规文件中,然后创建引用此新文件的File
。要从广告文件中读取该文件,您可以将JarURLConnection.getInputStream与您拥有的网址一起使用,也可以拨打ClassLoader.getResourceAsStream。
答案 1 :(得分:0)
尝试一下:
使用MethodHandles.lookup().lookupClass().getClassLoader()
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);
}