Java 如何为给定文件打开用户系统首选编辑器?
我正试图找出如何打开给定文件的系统首选编辑器 比如说,我们有一个用Java编写的文件管理器。用户转到文件夹并查看文件列表。例如,有一个文件Java 如何为给定文件打开用户系统首选编辑器?,java,file,editor,system,Java,File,Editor,System,我正试图找出如何打开给定文件的系统首选编辑器 比如说,我们有一个用Java编写的文件管理器。用户转到文件夹并查看文件列表。例如,有一个文件Icon.jpg。用户双击文件名,文件在系统首选编辑器(即Gimp)中打开。主要问题是——如何做到这一点 我们可以执行Runtime.getRuntime().exec(“某物文件”),但通过这种方式,您应该知道在用户环境中首选哪个程序。但是怎么做呢 我们还可以执行Desktop.getDesktop().edit(文件文件),但这样我们无法跟踪进程,也无法知
Icon.jpg
。用户双击文件名,文件在系统首选编辑器(即Gimp)中打开。主要问题是——如何做到这一点
我们可以执行Runtime.getRuntime().exec(“某物文件”)
,但通过这种方式,您应该知道在用户环境中首选哪个程序。但是怎么做呢
我们还可以执行Desktop.getDesktop().edit(文件文件)
,但这样我们无法跟踪进程,也无法知道该子进程是否已关闭。其他问题-函数在linux上不起作用(至少在Ubuntu 8.10上不起作用)。还有Desktop.getDesktop().open(File File)
,但它强制打开文件查看器,而不是该文件类型的系统查看器
我整个星期都在寻找解决方案,但没有找到任何合适的通用解决方案。你知道解决这个问题的其他方法吗?对于我的项目来说,如果它能在Windows+Linux+Mac上运行就足够了
谢谢你的回答和建议
于2009-02-08 23:04编辑
其他建议:我是否可以在Windows和Linux中强制设置“应用程序选择”窗口,就像在Mac中使用“打开文件”一样?例如,当您试图打开文件时,系统会要求您从系统首选应用程序列表中选择应用程序?(类似于Windows资源管理器中的“使用…”打开)。你知道吗?这不是跨平台的,但在Mac OS X上你可以做到
Runtime.getRuntime().exec("open filename");
open(1)
可执行文件用于选择要执行的正确程序,然后使用该程序打开名为filename
的文件以检出对象。在您的情况下,您希望调用
如果希望确保给定平台支持此调用,则可以执行以下操作(我尚未测试此代码):
似乎如果您不能使用
java.awt.Desktop
,就必须区分操作系统:
窗口:
RUNDLL32.EXE SHELL32.DLL,OpenAs\u RunDLL
Linux:
edit <file.ext>
编辑
Mac:
打开
嗯。显然,这不是很好移植…这将在windows中工作
Runtime.getRuntime().exec( "CMD /C START filename.ext " );
我当然知道,edit()在Ubuntu上不起作用。但是这个功能对我来说是必需的。你知道如果不支持edit()我该怎么做吗?谢谢,我会试试的。这对我来说非常有用,因为目前我只能在Ubuntu和Linux上测试我的代码,而不知道它在Mac上是如何运行的。:)这些是控制台命令,我应该将其写入Runtime.getRuntime().exec()函数,对吗?请注意,
OpenAs_RunDLL
是未记录的,此解决方案帮助我打开了其他类型的链接:ms word:ofe|u|http://10.0.162.75:8081/alfresco/webdav/Myfiles/file_example.docx
t其他建议:我可以强制吗Windows和Linux中的“应用程序选择”窗口,如Mac?例如,当您试图打开文件时,系统会要求您从系统预定义选项列表中选择应用程序?(类似于Windows资源管理器中的“打开…”)。你知道吗?不知道。它不会;pWorks在我的Windows 10上运行。值得将文件名加引号以使语句更安全(如果文件名或路径中包含空格):Runtime.getRuntime().exec(“cmd/c start\\”+file.absolutePath+”)代码>
edit <file.ext>
open <file.ext>
Runtime.getRuntime().exec( "CMD /C START filename.ext " );