我的问题:如何在不将文件保存到磁盘的情况下打开文件(在文件的系统默认 [外部] 程序中)?
我的情况:我的资源中有文件,我想显示这些文件而不先将它们保存到磁盘。例如,我有一个xml文件,我想在用户机器上用默认程序打开它来读取xml文件,而不是先将它保存到磁盘。
我一直在做什么:到目前为止,我只是将文件保存到一个临时位置,但我无法知道他们何时不再需要该文件,所以我不知道何时/是否删除它。这是我的SSCCE代码(嗯,它主要是 sscce,除了资源......你必须自己创建):
package main;
import java.io.*;
public class SOQuestion {
public static void main(String[] args) throws IOException {
new SOQuestion().showTemplate();
}
/** Opens the temporary file */
private void showTemplate() throws IOException {
String tempDir = System.getProperty("java.io.tmpdir") + "\\BONotifier\\";
File parentFile = new File(tempDir);
if (!parentFile.exists()) {
parentFile.mkdirs();
}
File outputFile = new File(parentFile, "template.xml");
InputStream inputStream = getClass().getResourceAsStream("/resources/template.xml");
int size = 4096;
try (OutputStream out = new FileOutputStream(outputFile)) {
byte[] buffer = new byte[size];
int length;
while ((length = inputStream.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
inputStream.close();
}
java.awt.Desktop.getDesktop().open(outputFile);
}
}
Run Code Online (Sandbox Code Playgroud)
因为这一行:
String tempDir = System.getProperty("java.io.tmpdir") + "\\BONotifier\\";
Run Code Online (Sandbox Code Playgroud)
我推断您正在 Windows 上工作。你知道,你可以轻松地使这段代码成为多平台的。
你的问题的答案是:不。Desktop 类需要知道文件在哪里,以便使用参数调用正确的程序。请注意,该类中没有方法接受 an InputStream,这可能是一个解决方案。
无论如何,我不明白问题出在哪里:您创建一个临时文件,然后在编辑器或其他文件中打开它。没关系。在 Linux 中,当应用程序退出(通常)时,其所有临时文件都会被删除。在Windows中,用户将需要触发临时文件删除。但是,如果没有安全限制,我无法理解问题出在哪里。毕竟,临时文件是操作系统关心的问题。
| 归档时间: |
|
| 查看次数: |
3699 次 |
| 最近记录: |