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

Emr*_*ici 5 java winapi desktop

我需要找到Windows上给定文件的默认文件打开器,以便我可以自定义命令参数并使用默认的opener/viewer打开文件.

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

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());
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

这个问题不应该与这个这个.

Sur*_*ran 1

无法单独使用纯 Java。

如果是 Windows,则需要读取注册表。假设您需要找出 .mp3 的文件关联

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

现在这无法在 Java 中完成,您需要选择合适的第 3 方库来为您完成此操作。