找到使用Java打开文件的关联程序

时间:2010-06-07 12:36:59

标签: java process runtime associations execute

我希望使用计算机上安装的相关程序(在此示例中,使用MS Word或Open Office Writer)从Java应用程序打开文件(例如,word文档)。

问题是我想要等到这个子进程完成,这可以使用Process类中的waitFor()方法完成。

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 个答案:

答案 0 :(得分:2)

使用相关程序打开文件的正确平台独立方式是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()

答案 1 :(得分:0)

没有纯Java方法可以做到这一点,因为它必然是特定于操作系统的。在Windows平台上,the start command可能就是您要查找的内容(例如start myfile.txt)。

答案 2 :(得分:0)

在所有平台上都没有“通用”的方法。在Windows上,您可以执行“start”,它将找到正确的关联可执行文件。在Mac上,您可以执行“打开”。在Linux上,据我所知,我担心你必须手动映射首选应用程序。

String execName = ("cmd /c \"start " + filename + "\"");

答案 3 :(得分:0)

您可以尝试使用Windows注册表和其他特定于平台的设置,但我认为最好的解决方案是让应用程序有自己的首选项设置。

您可能希望使用package java.util.prefs中的类来实现此目的。

答案 4 :(得分:0)

我已经弄清楚了。

使用cmd.exe + start.exe组合,waitFor()方法不会等待子进程结束。

如果在没有启动选项的情况下执行此操作,它就像魅力(仅限Windows):

Process p = Runtime.getRuntime().exec("cmd /c \"" + filename + "\"");   //extra quotes for filenames with spaces
p.waitFor()