【发布时间】:2012-07-23 09:45:24
【问题描述】:
我有一个签名的小程序,它从 Web 服务检索 PDF 文档,然后将其存储在临时文件夹中,然后在 Adobe Reader 上打开它。我想避免将文件存储在本地,但我真的不知道如何实现它(我是 Java 小程序的新手)。
如果它是一个 Web 应用程序(即一个简单的 servlet),我可以将 PDF 内容写入ServletResponse;然后浏览器会将其存储在其临时文件夹中,并使用 Adobe 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) 的任何替代方案,允许我通过 byte[] 而不是 File?
【问题讨论】:
-
无论如何,都需要创建临时文件。我不确定
Desktop.open有什么问题。这是一种非常有效的做事方式。 -
+1。我不认为你可以避免临时文件,但也许有一种方法可以让浏览器管理它(以便在完成后清理它)。
-
创建临时文件是可以的,只要它由浏览器管理,就像使用 ServletResponse 示例一样。我想避免的是在用户的本地驱动器“某处”创建几个 PDF 文件(即 C:/temp/a-document.pdf、C:/temp/another-one.pdf 等)