【问题标题】:Getting a list of editors, which are able to open a file获取能够打开文件的编辑器列表
【发布时间】:2013-01-07 09:08:43
【问题描述】:

我遇到了以下问题:

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

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

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

    } catch (IOException e) {

    }
}

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

所以现在我的问题是,有什么方法可以实现类似open with 函数窗口正在使用的东西,并返回所有可能的特定类型文件的编辑器? 文件的扩展名总是.ini

【问题讨论】:

  • 哇,谢谢,我没有发现这个问题真的很有帮助。在下面的评论中,这段代码完全符合我的要求。 rundll32.exe shell32.dll,OpenAs_RunDLL C:\path\to\file.ext

标签: java


【解决方案1】:

一种方法(假设:不是跨平台,但仅限 Windows)是使用来自 cmd.exeassocftype 命令列出与特定文件类型关联的应用程序,另请参阅 Utilising a file association in a Java application

这是一个两步过程:首先,通过assoc从扩展名(.ini)获取文件类型(inifile),然后通过ftype查找与文件类型关联的可执行文件:

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

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

您可以通过Runtime.getRuntime().exec() 启动这些命令并捕获输出流以获取关联的程序。

【讨论】:

【解决方案2】:

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

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

【讨论】:

  • 好的,但是我应该如何与编辑打交道,我可能不知道,但用户想与之合作?
  • 您可以实现一个像 Windows 一样的对话框,让用户能够知道 ultraedit.exe 的放置位置。你可以序列化这些信息并在需要这些信息时加载它。
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

    如果有的话,你可以试试Desktop#open

    启动关联的应用程序以打开文件。如果指定 file是一个目录,当前平台的文件管理器是 启动以打开它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-07
      • 1970-01-01
      • 1970-01-01
      • 2019-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多