我有一个签名的小程序,它从Web服务检索PDF文档,然后将其存储在临时文件夹中,并在Adobe Reader上打开它。我想避免在本地存储文件,但我真的不知道如何实现它(我是Java小程序的新手)。
如果它是一个Web应用程序(即一个简单的servlet),我可以在ServletResponse
上写下PDF内容;然后浏览器将其存储在其临时文件夹中,并使用Adobe Reader(或任何与MIME类型相关联的应用程序)打开它。
在Java applet上有类似的方法吗?
到目前为止,这是我的代码:
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
?
答案 0 :(得分:2)
Adobe reader can handle URL:s,因此可以为文档创建临时(?)URL。
否则,您可以使用API创建临时文件File.createTempFile
:
在指定目录中创建一个新的空文件,使用给定的前缀和后缀字符串生成其名称。如果此方法成功返回,则保证:
- 在调用此方法之前,返回的抽象路径名表示的文件不存在,
- 此方法及其任何变体都不会在当前虚拟机调用中再次返回相同的抽象路径名。
醇>此方法仅提供临时文件工具的一部分。要安排自动删除此方法创建的文件,请使用deleteOnExit()方法。
因此,在您的情况下,您可以使用此方法而不是自己创建新文件:
File f = File.createTempFile("tmp", ".pdf");
f.deleteOnExit(); // deletes the file on exit
...