【问题标题】:How to Find Out Default File Opener with Java?如何使用 Java 找出默认文件打开器?
【发布时间】:2011-01-13 17:59:34
【问题描述】:

我需要找出 Windows 上给定文件的默认文件打开器,以便我可以自定义命令参数并使用默认打开器/查看器打开文件。

我的实际使用场景是使用用户默认的媒体播放器打开多个多媒体文件,以便将所有文件添加到用户的播放列表中(对于可以在同一实例上打开多个文件的播放器)。对于 Windows 以外的操作系统,我使用 Desktop.open(File file) 方法(我根本不关心为 Windows 以外的操作系统打开多个文件功能),除了自定义命令参数并使用 exec 运行它之外,我找不到任何可以打开多个文件的方法Runtime 类的 () 方法。我使用类似这样的东西:

private void playItems2(List<File> fileList, String playerBinary) {
    String args = " ";
    for (File file : fileList) {
        args += "\"" + file.getAbsolutePath() + "\" ";
    }

    try {
        String command = playerBinary + args;
        Runtime rt = Runtime.getRuntime();
        Process p = rt.exec(command);
    } catch (Exception exc) {/*handle exception*/
        System.err.println("Run Player Exc:" + exc.getMessage());
    }
}

我正在为playerBinary 使用用户指定的路径,我需要自动检测fileList 第一项的默认播放器并将其用作playerBinary

我还查看了 Rundll32.exe 和 cmd.exe /start 解决方案,但它们不适用于我的使用场景。

此问题不应与thisthis 混淆。

【问题讨论】:

  • 如果您只在寻找 Windows,那么没有纯 Java 方法可以做到这一点。阅读注册表或使用 3rd 方库。

标签: java winapi desktop


【解决方案1】:

使用这种方法调用默认开启程序并享受!

public void playItems2(...) throws Exception {
    ...
    Process p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler c:/mp3/myfile.mp3");
    p.waitFor();
    ...
}

【讨论】:

    【解决方案2】:

    不能单独使用纯 Java。

    在 Windows 的情况下,您需要读取注册表。假设您需要找出 .mp3 的文件关联

    1. 在 Windows 注册表中,查看默认值 HKEY_CLASSES_ROOT\.mp3。通常它的 "mp3file"。
    2. 现在寻找 HKEY_CLASSES_ROOT\mp3file\shell\open\command。 里面的值是一个字符串 指向要打开的可执行文件 .mp3 文件。

    现在这不能在 Java 中完成,您需要选择适当的 3rd 方库来为您执行此操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多