Найдите связанную программу, чтобы открыть файл, используя Java - PullRequest
2 голосов
/ 07 июня 2010

Я хочу открыть файл (скажем, текстовый документ) из приложения Java, используя связанную программу, установленную на компьютере (в данном примере, используя MS Word или Open Office Writer).

Уловка в том, что я хочу дождаться завершения этого подпроцесса, что можно сделать с помощью метода waitFor () в классе Process.

String executable = findAssociatedApplicationPath(); //for example, returns "C:\\Program Files\\Microsoft Office\\Office12\\msword.exe"
Process p = Runtime.getRuntime().exec(executable + " " + filepath);
p.waitFor();

Может кто-нибудь сказать мне, как написать метод findAssociatedApplicationPath (), чтобывозвращает правильный исполняемый файл?Или есть другой способ сделать это?

Ответы [ 5 ]

2 голосов
/ 07 июня 2010

Правильный независимый от платформы способ открыть файл с помощью связанной программы: Desktop.open().К сожалению, он не предлагает никакого способа взаимодействия с полученным процессом.

Если вы хотите потерять независимость от платформы, вы можете использовать команду start в cmd.exe:

String fileName = "c:\\tmp\\test.doc";
String[] commands = {"cmd", "/c", "start", "\"Title\"",fileName};
Process p = Runtime.getRuntime().exec(commands);
p.waitFor()
0 голосов
/ 07 июня 2010

Я понял это.

Используя комбинацию cmd.exe + start.exe, метод waitFor () не будет ожидать завершения подпроцесса.

Если сделать это без опции запуска, это работает как брелок (только для Windows):

Process p = Runtime.getRuntime().exec("cmd /c \"" + filename + "\"");   //extra quotes for filenames with spaces
p.waitFor()
0 голосов
/ 07 июня 2010

Вы можете попытаться возиться с реестром Windows и другими настройками, относящимися к платформе, но я думаю, что лучшее решение состоит в том, чтобы просто настроить приложение на свои собственные настройки.классы в package java.util.prefs для этого.

0 голосов
/ 07 июня 2010

Не существует универсального способа сделать это на всех платформах. В Windows вы можете выполнить «start», который найдет правильный связанный исполняемый файл. На Mac вы можете выполнить «открыть». Боюсь, что в Linux вам придется сопоставлять предпочтительные приложения вручную, насколько я знаю.

String execName = ("cmd /c \"start " + filename + "\"");
0 голосов
/ 07 июня 2010

Нет чистого Java-способа сделать это, потому что он обязательно зависит от ОС.На платформе Windows команда start , вероятно, то, что вы ищете (например, start myfile.txt).

...