Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为给定文件打开用户系统首选编辑器?_Java_File_Editor_System - Fatal编程技术网

Java 如何为给定文件打开用户系统首选编辑器?

Java 如何为给定文件打开用户系统首选编辑器?,java,file,editor,system,Java,File,Editor,System,我正试图找出如何打开给定文件的系统首选编辑器 比如说,我们有一个用Java编写的文件管理器。用户转到文件夹并查看文件列表。例如,有一个文件Icon.jpg。用户双击文件名,文件在系统首选编辑器(即Gimp)中打开。主要问题是——如何做到这一点 我们可以执行Runtime.getRuntime().exec(“某物文件”),但通过这种方式,您应该知道在用户环境中首选哪个程序。但是怎么做呢 我们还可以执行Desktop.getDesktop().edit(文件文件),但这样我们无法跟踪进程,也无法知

我正试图找出如何打开给定文件的系统首选编辑器

比如说,我们有一个用Java编写的文件管理器。用户转到文件夹并查看文件列表。例如,有一个文件
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 " );