如何使用Java找到默认文件打开程序?

5
我需要找出在Windows上给定文件的默认文件打开器,以便我可以自定义命令参数并使用默认的打开器/查看器打开该文件。
我的真实用例是使用用户的默认媒体播放器打开多个多媒体文件,以便将所有文件添加到用户的播放列表中(对于可以在同一实例中打开多个文件的播放器)。对于操作系统而言,除了Windows之外,我使用Desktop.open(File file)方法(我只不关注除Windows外的其他操作系统的打开多个文件的功能),我找不到任何可以打开多个文件的方法,除了自定义命令参数并使用Runtime类的exec()方法运行它。我使用类似于以下内容的东西:
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的方法来实现。需要读取注册表或使用第三方库。 - cx0der
2个回答

2
使用这种方法来调用默认的打开程序,然后就可以享受啦!
public void playItems2(...) throws Exception {
    ...
    Process p = Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler c:/mp3/myfile.mp3");
    p.waitFor();
    ...
}

1

仅使用Java无法完成。

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接