2012-02-11 252 views
-1

我需要找到用戶的vlc.exe文件的路徑。 我該怎麼做?Java - 查找文件的絕對路徑

我讀到這http://docs.oracle.com/javase/tutorial/essential/io/find.html和使用像

  PathMatcher match = FileSystems.getDefault().getPathMatcher("glob:vjlc.{exe, jpg, png}"); 

     Path filename = FileSystems.getDefault().getPath("vjlc.exe",""); 

     if(match.matches(filename)) 
     { 
      System.out.println(filename); 
     } 

 File fil = new File("vlc.exe"); 
    System.out.println(fil.getAbsolutePath()); 

這兩者都不曾

+0

你的代碼在哪裏?你做了什麼? – 2012-02-11 13:10:43

+1

您是否意識到您正在嘗試在第一個代碼示例中查找「vjlc.exe」(注意額外的'j')路徑? – 2012-02-11 13:16:39

+0

*「需要找到用戶vlc的路徑。exe文件「* 1)爲什麼?2)如果用戶沒有安裝VLC會怎麼樣? – 2012-02-11 13:19:48

回答

0

可以使用getAbsolutePath()功能代碼嘗試。

+0

我已經嘗試過了,它沒有起作用 T他輸出的是C:\ WorkStation \ Souptest \ vlc.exe,這是錯誤的,這只是項目文件夾,並在最後添加了一個'vlc.exe'。 – user1021085 2012-02-11 13:10:46

0

我認爲你正在尋找搜索在PATH的vlc.exe可執行的方式。如果是這樣,像下面應該有所幫助:

String path = System.getenv("PATH"); 
String pathSeparator = System.getProperty("path.separator"); 

for (String pathElement : path.split(pathSeparator)) { 
    File file = new File(pathElement, "vlc.exe"); 
    if (file.isFile()) { 
     // vlc.exe exists in this location. 
    } 
} 
+0

不是我真的不想使用環境變量 – user1021085 2012-02-11 13:43:10

1

我相信你正在嘗試做一些事情,是不完全正確。

首先,假定本地計算機上存在vlc.exe。但是如果沒有,會發生什麼?

其次,如果VLC決定在某些時候會發生什麼(新建出來,或升級)來改變EXE文件名vlc2.exe?

爲了應對這種依賴性的,我建議你通過VLC文件位置作爲程序參數的main()方法。 這樣,您可以創建一個批處理文件,嘗試查找vlc.exe路徑,並將其傳遞給java程序。

另一種選擇是設置一個環境變量,將在安裝Java應用程序的過程中進行設置。安裝程序可以搜索vlc.exe路徑,或讓用戶進行設置。一旦變量被設置,java程序就可以從系統參數中讀取它(參見example)。

第三種方式是有一個設置文件(* .INI等),將包含VLC exe文件路徑。然後可以根據相關路徑修改文件,並從中讀取java程序(作爲屬性文件)。該文件也可以在安裝過程中自動生成,也可以手動編輯後安裝。

0

當用戶運行安裝程序VLC在Windows下安裝VLC媒體播放器,安裝程序會創建一個註冊表鍵值項HKLM\SOFTWARE\VideoLAN\VLC\InstallDir。可以按如下檢索存儲在使用Java的主要路徑:

http://www.davidc.net/programming/java/reading-windows-registry-java-without-jni

read/write to Windows Registry using Java

如果HKLM\SOFTWARE\VideoLAN\VLC\InstallDir關鍵是存在的,你知道安裝VLC。如果用戶決定將VLC安裝在與VLC安裝程序建議的默認目錄不同的目錄中,則密鑰將能夠告訴您。

這隻適用於用戶通過安裝程序安裝VLC。但是,如果用戶只是簡單地從它的zip分發文件中提取VLC,它將不起作用,因爲這種方法不會觸及Windows註冊表。