0

我搜索并找到了很多答案,然后我尝试了。以下是其中之一:

if (Desktop.isDesktopSupported()) {
        try {
            InputStream is = getClass().getResourceAsStream("/folder/SMSCApplication.pdf");
            System.out.println("reading file path ");
            byte[] data = new byte[is.available()];
            is.read(data);
            is.close();
            String tempFile = "User_Guide";
            File temp = File.createTempFile(tempFile, ".pdf");
            FileOutputStream fos = new FileOutputStream(temp);
            fos.write(data);
            fos.flush();
            fos.close();
            Desktop.getDesktop().open(temp);
        } catch (IOException ex) {
            ex.printStackTrace();
            System.out.println("NO PDF READER INSTALLED");
        }
    }

我使用 Netbeans IDE 运行应用程序,它运行良好。但是当我在 Netbeans 之外运行时,它不起作用。文件在文件夹上创建temp但已损坏(当我尝试使用默认pdf阅读器打开时)。

我的问题是,“如果我也在 netbeans 之外运行应用程序表单,如何在 netbeans 内部进行工作”?

注意:我的pdf文件在里面package,因为如果我分发我的应用程序,则无需user_guide单独提供文件

更新:

文件目录

4

2 回答 2

0

你的文件路径错误。

您应该检查 InputStream 是否为空。

if(is == null) System.out.println("Couldn't open");

使用完全限定的路径。

于 2013-09-27T07:18:12.200 回答
0

感谢大家的支持。最后我从这里找到了解决方案。我使用了第三方Commons IO库并将代码更改byte[] data = new byte(iss.available());byte[] data = IOUtils.toByteArray(iss); 并工作。感谢安迪

try {
        InputStream iss = getClass().getResourceAsStream("/folder/SMSCApplication.pdf"); //update the filename here when the help guide is written
        byte[] data = IOUtils.toByteArray(iss);
        iss.read(data);
        iss.close();
        String tempFile = "User_Guide";
        File temp = File.createTempFile(tempFile, ".pdf");
        FileOutputStream fos = new FileOutputStream(temp);
        fos.write(data);
        fos.flush();
        fos.close();
        logger.error(temp.getAbsolutePath());
        Desktop.getDesktop().open(temp.getAbsoluteFile());
    } catch (IOException ex) {
        logger.error(ex);

    }
于 2013-09-27T09:15:11.580 回答