2

我遇到以下问题:

我写了一个应用程序,用户可以在其中打开一些特定的文件。用户应该能够选择编辑器,他想用它打开文件。

目前我正在使用这段代码:

public void open(String path) {
    try {
        if(new File(path).exists())
            Runtime.getRuntime().exec("notepad.exe " + path);

    } catch (IOException e) {

    }
}

例如,如果我将编辑器更改ultraedit.exe为,运行时将无法打开它。

所以现在我的问题是,有什么方法可以实现类似于open withwindows 正在使用的功能,并为特定类型的文件返回所有可能的编辑器?文件的扩展名将始终为.ini

4

4 回答 4

1

据我所知,Runtime.exec()无法打开,因为您的环境指向的ultraedit.exe位置可能找不到 ultraedit.exe 。PATH

您需要检测 ultraedit.exe 所在的位置,然后使用完全限定的路径打开它。这应该有效。

于 2013-01-07T09:16:00.803 回答
1

一种方法(假设:不是跨平台的,仅适用于 Windows)是使用assocftype命令cmd.exe来列出与特定文件类型关联的应用程序,另请参阅在 Java 应用程序中使用文件关联

It is a two step process: first, get the file type (inifile) from the extension (.ini) through assoc, then lookup the executables associated to the file type through ftype:

C:> cmd.exe /c assoc .ini
.ini=inifile

C:> cmd.exe /c ftype inifile
inifile=%SystemRoot%\system32\NOTEPAD.EXE %1

You can launch these commands through Runtime.getRuntime().exec() and catch the output stream to get the associated program.

于 2013-01-07T09:19:11.530 回答
0

至少在 XP 上(我目前无法检查 Win 7)安装应用程序的路径可以在注册表中找到,在

\\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\<program name>

对于更简单(且可移植)的解决方案,我将添加一个配置文件,列出编辑器和可执行文件的完整路径。

于 2013-01-07T09:18:49.847 回答
0

If available, you could try Desktop#open

Launches the associated application to open the file. If the specified file is a directory, the file manager of the current platform is launched to open it.

于 2013-01-07T09:33:19.070 回答