首页 > 解决方案 > 我尝试在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();
          }
        
    }

标签: java

解决方案


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());

推荐阅读