2010-02-05 18 views
5

我需要找出Windows上給定文件的默認文件打開器,以便我可以自定義命令參數並使用默認的打開器/查看器打開文件。如何使用Java找出默認文件開啓器?

我的實際使用情況是打開多個多媒體文件與用戶的默認媒體播放器,使所有的文件將被添加到用戶的播放列表(對於可以在同一個intance打開多個文件的播放器)。對於非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()); 
    } 
} 

我使用用戶指定的路徑爲playerBinary,我需要什麼,以自動檢測默認播放器的fileList的第一個項目,並以此爲playerBinary

我也看着的Rundll32.exe和cmd.exe /start解決方案,但他們並沒有對我的使用場景的工作。

這個問題不應該與thisthis混淆。

+0

如果您只是在尋找Windows,那麼就沒有純Java的方法來做到這一點。閱讀註冊表或使用第三方庫。 – cx0der 2010-02-06 02:20:18

回答

1

不能用純Java獨自完成。

在Windows的情況下,你需要閱讀的註冊表。假設你需要找出文件關聯.MP3

  1. 在Windows註冊表中,看的默認值 HKEY_CLASSES_ROOT\.mp3。通常它的 "mp3file」。
  2. 現在查找 HKEY_CLASSES_ROOT\mp3file\shell\open\command。 的價值有一個字符串 指向一個可執行文件打開與 .mp3文件。

現在這個不能用Java來完成,你需要選擇合適的第三方的lib爲你做到這一點。

2

你檢查JDesktop中集成組件在http://java.net/projects/jdic/(見article)?

它還包括一個Java API來控制原生音樂播放器。

的JDesktop中集成組件 (JDIC)項目旨在使Java™ 技術爲基礎的應用程序(「Java的應用程序 」)的 當前桌面平臺的一等公民,而不 犧牲平臺獨立性。其 的使命是實現無縫的 桌面/ Java集成。

JDIC爲Java應用程序提供 訪問功能和 桌面提供的設施。它由Java包和工具的集合 組成。JDIC 支持多種功能,如嵌入 原生瀏覽器, 啓動桌面應用程序,在桌面上創建 托盤圖標, 註冊文件類型關聯, 創建JNLP安裝包等 許多新的功能,如貢獻 來自社區的孵化器項目。

2

使用此方法調用默認開啓者並享受!

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