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

时间:2010-02-05 23:31:23

标签: java winapi desktop

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

我的实际使用场景是使用用户的默认媒体播放器打开多个多媒体文件,以便将所有文件添加到用户的播放列表中(对于可以在同一个媒体上打开多个文件的播放器)。对于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混淆。

3 个答案:

答案 0 :(得分:2)

您是否在http://java.net/projects/jdic/检查了JDesktop集成组件(请参阅article)?

它还包括一个Java API来控制本地音乐播放器。

  

JDesktop集成组件   (JDIC)项目旨在制作Java™   基于技术的应用程序(“Java   申请“)一等公民   目前的桌面平台没有   牺牲平台独立性。它的   任务是实现无缝   桌面/ Java集成。

     

JDIC为Java应用程序提供   获得功能和   当地人提供的设施   桌面。它由一个集合组成   Java包和工具。 JDIC   支持各种功能,如   嵌入本机浏览器,   启动桌面应用程序,   在桌面上创建托盘图标,   注册文件类型关联,   创建JNLP安装程序包等   许多新功能都是作为   来自社区的孵化器项目。

答案 1 :(得分:2)

使用此方法调用默认开启者并享受!

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

答案 2 :(得分:1)

单独使用纯Java无法做到。

如果是Windows,则需要阅读注册表。假设您需要找到.mp3

的文件关联
  1. 在Windows注册表中,查看默认值 HKEY_CLASSES_ROOT\.mp3。通常是它 "mp3file”。
  2. 现在寻找 HKEY_CLASSES_ROOT\mp3file\shell\open\command。 那里的值是一个字符串 指向要打开的可执行文件 .mp3文件。
  3. 现在这不能用Java完成,你需要选择合适的第三方库来为你做这件事。