2013-05-19 134 views
3

好的,我知道這可能是一個不太好看的問題,但我對Java很新,而且它可能會很容易回答。我想要做的是製作一個程序,它將使用文件路徑打開Firefox,但似乎存在文件路徑問題。我做了一些研究,並使用雙斜槓來取消轉義字符,但它仍然不起作用。我認爲這與一些目錄名稱中有空格的事實有關。這裏是我的代碼:可執行文件的Java文件路徑中的空格

import java.io.IOException; 

public class Automation { 

public static void main(String[] args) throws IOException { 
     Process p = Runtime.getRuntime().exec("C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); 
    } 
} 

我知道它很簡單,但我仍然無法弄清楚。任何幫助表示讚賞。

+0

使用'ProcessBuilder'。 – fge

回答

1
"\"C:\\ .......\"" 

所以你可以「逃脫」空白。

+0

爲什麼這不是一個有效的答案? – xtraclass

3
Process p = Runtime.getRuntime().exec("\"C:\\Program Files (x86)\\Mozilla firefox\\firefox.exe\""); 

...或使用Java 7的Windows反...

String[] command = new String[] { 
    "C:" + 
    File.separator + 
    "Program Files (x86)" + 
    File.separator + 
    "Mozilla firefox" + 
    File.separator + 
    "firefox.exe"  
}; 
Process p = Runtime.getRuntime().exec(command); 
+1

當我這樣做時,它說「可執行文件名稱已嵌入引號,拆分參數」不確定這意味着什麼。 – user2399735

+0

@Mena你確定你的解決方案正在工作嗎? –

+0

@LakshithaRanasingha仔細檢查後,它似乎不適用於所有Java版本。也就是說,它可能會在Java 7中失敗。嘗試這個帖子的更多選擇:http://stackoverflow.com/questions/2243993/how-to-execute-command-line-exe-file-in-java – Mena

1

有關問題的理想的解決方案應該是這樣的。

String [] cmds = new String [1]; 
cmds[0] = "C:\\Program Files (x86)\\Mozilla firefox\\firefox.exe"; 
Process p = Runtime.getRuntime().exec(cmds); 

這是因爲Runtime.getRuntime().exec()居然命令行解釋程序不執行程序。因此,如果路徑中有空白,則需要使用參數數組。你可以在這個數組中提供額外的標誌/選項(例如:open)。

這是一些額外的信息。據我所知,Windows對正斜槓(/)非常滿意,因爲Windows API接受正向和反向斜線(從我認爲的MS DOS 2.0開始)。例如你可以做dir "c:/Program Files (x86)"將工作正常給你的目錄列表。此外,沒有空白Process p = Runtime.getRuntime().exec("C:/SomeProgram/someprogram.exe");工作正常。但推薦的方法是從環境中獲取文件分隔符。這是使用File.separator

+1

這不是一個完全正確的答案,你必須使用「圍繞cmd字符串,就像在我上面的回答中, – xtraclass

+0

真的嗎?你有沒有運行這個?我的JVM沒有告訴它,你不需要轉義,這是在java 6&7中執行的真正的代碼。 –

相關問題