2009-02-08 64 views
12

我想弄清楚如何打开给定文件的系统首选编辑器。如何打开给定文件的用户系统首选编辑器?

说,我们有一个文件管理器,用Java编写。用户转到文件夹并看到文件列表。例如,有一个文件Icon.jpg。用户双击文件名并在系统首选编辑器(即GIMP)中打开文件。主要问题是 - 如何做到这一点?

我们可以做Runtime.getRuntime().exec("something file"),但这种方式你应该知道哪个程序是用户环境中的首选。但是如何?

我们也可以做Desktop.getDesktop().edit(File file),但这种方式我们无法跟踪进程,并且无法知道这个子进程是关闭的。其他问题 - 函数在linux上不起作用(至少在Ubuntu 8.10上)。还有Desktop.getDesktop().open(File file),但它强制打开文件查看器,而不是该文件类型的系统查看器。

我正在寻找解决方案整个星期,但没有得到任何合适的和通用的。你知道这个问题的其他方法吗?对于我的项目来说,如果它能在Windows + Linux + Mac上运行就足够了。

谢谢你的回答和建议。

于2009-02-08 23:04

其他建议编辑:我可以强制“应用程序选择”窗口,在Windows和Linux中,如Mac上“打开文件”?例如,你试图打开文件,你被要求从系统首选列表中选择应用程序? (就像在Windows资源管理器中“打开...”一样)。你知道吗?

+0

其他建议:我可以强制在Windows和Linux中的“应用程序选择”窗口,在Mac吗?例如,然后你试图打开文件,那么你被要求从系统预定义列表中选择应用程序的选择? (就像在Windows资源管理器中“打开...”)。 你知道吗? – 2009-02-08 21:53:26

回答

7

看来,如果你不能使用java.awt.Desktop你有操作系统之间的区别: 的Windows:

RUNDLL32.EXE SHELL32.DLL,OpenAs_RunDLL <file.ext> 

的Linux:

edit <file.ext> 

的Mac:

open <file.ext> 

HTH。显然,这不是很便携...

+0

这些是控制台命令,我应该写入Runtime.getRuntime()。exec()函数,对吧? – 2009-02-08 18:08:56

+0

@ArturasSmorgun,是的 – 2012-06-18 11:11:23

2

这不是跨平台的,但在Mac OS X,你可以做

Runtime.getRuntime().exec("open filename"); 

open(1)可执行文件使用LaunchServices选择合适的程序来执行,然后再使用它来打开一个名为filename文件。

+0

谢谢,我会尝试。这对我来说非常有用,因为现在我只能在Ubuntu和Linux上测试我的代码,并且不知道它在Mac上如何。 :) – 2009-02-08 18:07:52

7

检查出java.awt.Desktop对象。在你的情况,你要调用edit()

如果要确保给定的平台支持这一呼吁,那么你可以做类似如下(我没有测试此代码):

public boolean editFile(final File file) { 
    if (!Desktop.isDesktopSupported()) { 
    return false; 
    } 

    Desktop desktop = Desktop.getDesktop(); 
    if (!desktop.isSupported(Desktop.Action.EDIT)) { 
    return false; 
    } 

    try { 
    desktop.edit(file); 
    } catch (IOException e) { 
    // Log an error 
    return false; 
    } 

    return true; 
} 
+0

我绝对知道,edit()不适用于Ubuntu。但是这个功能对我来说是必需的。如果edit()不被支持,你知道我该怎么做吗? – 2009-02-08 17:45:30

-2

这将在Windows

工作
Runtime.getRuntime().exec("CMD /C START filename.ext "); 
相关问题