Мой вопрос: Как открыть файл (в системе по умолчанию [внешняя] программа для файла) без сохранения файла на диск?Как открыть файл без сохранения его на диск
My Situation: У меня есть файлы в моих ресурсах, и я хочу отображать их, не сохраняя их сначала на диске. Например, у меня есть файл 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);
}
}
Это зависит от того, на какую программу вы пытаетесь загрузить файл. Есть ли у него API или листинг на каком-то порту? В зависимости от вашей ОС вы можете удалить файл, даже если он все еще используется программой - таким образом вы можете использовать свой текущий подход, не беспокоясь о том, когда пользователь будет его просматривать. – whiskeyspider
@whiskeyspider: Ну, с классом Desktop он автоматически определяет значение по умолчанию. Мне понравилось бы многоплатформенное решение, если это возможно :) – kentcdodds
http://superuser.com/questions/430466/in-windows-can-i-redirect-stdout-to-a-named-pipe-in-command -line –