2010-11-05 22 views
2

我正在使用Runtime.getRuntime.exec()方法調用exe文件。我用這種方法面臨的問題是,當我用其他語言字符(ex.Japanese)傳遞一些exe路徑(c:\ JPN_char_folder \ mypath \ myexe.exe)時,它說「系統找不到指定的文件」。請你提出一些想法來解決這個問題?我甚至嘗試傳遞一個EXE路徑轉換爲UTF-8以及之後,但我仍然無法解決這個問題。使用Runtime.getRuntime()。exec方法調用exe文件時出錯,如果exe文件路徑中有非英文字符

- 羅伯特。

+1

不要忘了閱讀http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps.html「爲什麼Runtime.exec()不會」 – 2010-11-05 11:16:46

回答

0

我不認爲日本人字符的問題;這是C:驅動器

你需要它這樣寫:

String path = "c:\\\JPN_char_folder\\mypath\\myexe.exe"; 
01。

看看是否有幫助。

+0

編輯:can'請在評論中正確寫出。 c後有三個反斜槓:我認爲應該有兩個反斜槓。 – 2010-11-05 11:17:21

+0

在運行時,我正在瀏覽並使用InstallAnywhere選擇JPNn文件夾,然後使用變量將該值傳遞給Java文件。再次從該Java文件中追加其他英文子文件夾,然後再附加my.exe.exe文件以形成命令。在之間,我使用File.separator來分隔子文件夾。如果路徑中包含所有eng字符,則相同的邏輯正在工作。 – Robo 2010-11-05 11:25:40

+0

是的。它是2反斜槓。 – Robo 2010-11-05 11:35:55

0

很可能你在某個地方有編碼問題。

這裏有幾個步驟,路徑值取:

  • InstallAnywhere的檢索路徑
  • InstallAnywhere的把它放到一個變量
  • 的Java讀取變量
  • 的Java將其放入一個String
  • Java從字符串創建java.io.File實例
  • Java運行時將路徑(通過文件)傳遞到O S

有些人沿着這個順序出現了一些錯誤的路徑:-(。

很難說哪裏;你最好的選擇可能是試着在路徑的每一步打印出價值,看看它出錯的地方。

至少從Java內部,你應該打印出字符串作爲文本,並作爲Unicode代碼點列表(使用String.codePointAt)。這樣你就可以看到Java使用的真實數據。

另一種方法:

  • 打印出來的值從Java InstallAnywhere的獲取(如文本&的代碼點,如上)
  • 嘗試把路徑到你的Java程序作爲一個字符串文字,和小提琴直到你可以這樣打開文件。然後打印該字符串。

現在您可以比較兩個結果;那應該讓你知道路徑在哪裏混亂。 注意:

該路徑是否包含基本多語言平面(BMP)之外的字符? Java處理這些有點笨拙,所以你需要特別注意。也許你可以先檢查一下。

0

即使您使用Windows,也可以在指定目錄時使用斜槓。這將幫助你逃脫反斜槓地獄。

例如,在我的系統上,7z位於目錄c:\Program Files\7-Zip\

執行此

File file = new File("c:/Program Files/7-Zip/7z.exe"); 

if(file.exists()) { 
    System.out.println(file.getAbsolutePath()); 
} 

結果

c:\Program Files\7-Zip\7z.exe 

被打印在控制檯上。

我建議你嘗試使用這個習慣用法,即檢查.exe文件是否在嘗試執行之前退出。

相關問題