java - 我尝试在java中打开一个pdf,但它不起作用
问题描述
我试图通过单击按钮打开 pdf。路径实际上是正确的(我可以在浏览器中打开它),但它不起作用。究竟是什么问题?
这是输出:
文件:/Users/miladvosoughi/Documents/Prak/schach/target/classes/mainMenu/ba.pdf
文件不存在!
private void openHelpPDF() {
try {
String adr = getClass()
.getResource("/mainMenu/ba.pdf").toString();
System.out.println(adr);
File pdfFile = new File(adr);
if (pdfFile.exists()) {
if (Desktop.isDesktopSupported()) {
Desktop.getDesktop().open(pdfFile);
} else {
System.out.println("Awt Desktop is not supported!");
}
} else {
System.out.println("File is not exists!");
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
解决方案
String adr = getClass().getResource("/mainMenu/ba.pdf").toString();
不返回文件名。 从 Class.getResource 返回的对象是一个 URL。
应用程序资源不是文件。你永远不能安全地假设它是一个文件。
如果要传递资源,则必须将资源 URL 复制到临时文件,然后打开该文件:
Path pdf = Files.createTempFile(null, ".pdf");
try (InputStream source =
getClass().getResourceAsStream("/mainMenu/ba.pdf")) {
Files.copy(source, pdf,
StandardCopyOption.REPLACE_EXISTING);
}
Desktop.getDesktop().open(pdf.toFile());
推荐阅读
- vue.js - 如何在 Jest 中测试 beforRouteEnter 的下一个 callack
- ffmpeg - FFMPEG 截取音频/视频的特定部分
- android - 如何在 Flutter 中多列文本(文本应根据长度拆分为多个小部件)
- amazon-web-services - EC2 的 AWS SSL 证书无效
- apache-spark - 在 java 中使用 Apache Spark Stream 从刻度数据创建蜡烛数据
- r - 不同值类型对循环的影响
- bash - 没有换行符的powershell get-childitems
- python - 错误:命令出错,退出状态为 1:(非常长的命令)
- visual-studio-code - VSCode TaskProvider - 菜单中没有任务
- c# - mvc 的实体框架数据服务请求标头