5

我有一个签名的小程序,它从 Web 服务中检索 PDF 文档,然后将其存储在临时文件夹中,然后在 Adob​​e Reader 上打开它。我想避免在本地存储文件,但我真的不知道如何实现它(我是 Java 小程序的新手)。

如果它是一个 Web 应用程序(即一个简单的 servlet),我可以将 PDF 内容写在ServletResponse; 然后浏览器会将其存储在其临时文件夹中,并使用 Adob​​e Reader(或与 MIME 类型关联的任何应用程序)打开它。

有没有类似的方法可以做到这一点......在Java小程序上?

到目前为止,这是我的代码:

public class MyListener implements ActionListener {
    public void actionPerformed(ActionEvent event) {
        // Retrieve the document contents
        byte[] content = webService.getPdfDocument(...);

        // Write to file
        File f = new File("my-document-filename.pdf");
        FileOutputStream fos = new FileOutputStream(f);
        fos.write(content);
        fos.close();

        // Open the file
        Desktop.getDesktop().open(new File("my-document-filename.pdf"));
    }
}

Desktop.open(File)的任何替代方法,允许我通过 abyte[]而不是 a File

4

1 回答 1

2
  1. Adobe reader 可以处理 URL:s,因此它可能是为文档创建临时 (?) URL 的一种方式。

  2. 否则,您可以File.createTempFile从 API 创建一个临时文件 use :

    在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。如果此方法成功返回,则保证:

    1. 返回的抽象路径名表示的文件在调用此方法之前不存在,并且
    2. 此方法及其任何变体都不会在虚拟机的当前调用中再次返回相同的抽象路径名。

    此方法仅提供临时文件功能的一部分。要安排自动删除由此方法创建的文件,请使用 deleteOnExit() 方法。

    因此,在您的情况下,您可以使用以下方法,而不是自己创建新文件:

    File f = File.createTempFile("tmp", ".pdf");
    f.deleteOnExit(); // deletes the file on exit
    ...
    
于 2012-07-23T10:53:56.417 回答