2010-06-07 46 views
2

我希望使用计算机上安装的相关程序从Java应用程序打开文件(可以说是一个word文档)(在本例中,使用MS Word或Open Office作家)。查找相关程序以使用Java打开文件

问题是我想等到这个子进程结束,这可以使用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()方法,以便它返回正确的可执行文件吗?还是有另一种方法来做到这一点?

回答

2

使用相关程序打开文件的适当平台无关方式是Desktop.open()。不幸的是,它没有提供任何方式与结果进程交互。

如果你愿意失去平台的独立性,可以在cmd.exe使用start命令:

String fileName = "c:\\tmp\\test.doc"; 
String[] commands = {"cmd", "/c", "start", "\"Title\"",fileName}; 
Process p = Runtime.getRuntime().exec(commands); 
p.waitFor() 
0

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

0

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

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

Linux有同样依赖于平台的解决方案,如Windows,除非他们因为安装的不同而不同。例如,Gnome已经开放了GNOME。 – 2010-06-07 15:46:43

0

你可以尝试更动Windows注册表和其他特定于平台的设置,但我认为最好的办法是简单地让应用程序有自己的喜好设置。

您可能需要为此使用package java.util.prefs中的类。

0

我已经想通了。

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

如果这样做没有它就像一个魅力(仅限Windows虽然)启动选项:

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