2016-10-20 39 views
0

我想用java程序打開圖像,哪個文件名有多個空格。直接Windows命令工作正常,但是當我通過Java程序執行它不會打開。當文件名有兩倍空格時文件無法打開

直接命令:

rundll32.exe shell32.dll ShellExec_RunDLL "C:\Logfiles\Client_Logfiles\Attachments\1044\image2 Copy.jpg" 
通過java

:(這是不工作)

p_fileName = "C:\Logfiles\Client_Logfiles\Attachments\1044\image2 Copy.jpg" 
String cmd = "rundll32.exe shell32.dll ShellExec_RunDLL "; 
Runtime.getRuntime().exec(cmd + "\""+p_fileName+"\""); 

但如果文件名中有一個空間,它是好的開放正常:

請任何想法,並感謝您的善意幫助。

+1

使用'\\'或者'/',而不是'\'。 –

+0

這個文件路徑是通過讀取文件獲得的,所以如果文件名有單個空間,這個命令工作正常。 :(這個問題只發生在文件名中有兩個或多個空格 – DMM

回答

0

的問題是您連接命令。 爲了使高管和使用的正確使用數組版本「/」而不是「\」:Java中的字符串

String args[] = { 
    "rundll32.exe", 
    "shell32.dll", 
    "ShellExec_RunDLL", 
    "C:/Logfiles/Client_Logfiles/Attachments/1044/image2 Copy.jpg" 
}; 
Runtime.getRuntime().exec(args); 
+0

是的,你的解決方案有效,很大的幫助和非常感謝 – DMM

+0

[ProcessBuilder](http://docs.oracle.com) .com/javase/8/docs/api/java/lang/ProcessBuilder.html)優於Runtime.exec。 – VGR

0

嘗試:

p_fileName = "C:\\Logfiles\\Client_Logfiles\\Attachments\\1044\\image2 Copy.jpg" 

或者

p_fileName = "C:/Logfiles/Client_Logfiles/Attachments/1044/image2 Copy.jpg" 
+0

這應該總是做同樣的事情(除非你打印它) –

+0

這個文件路徑是通過讀取文件獲取的,所以如果文件名有單個空間,這個命令工作正常::( – DMM

+0

這個問題只發生在文件名中有兩個或多個空格 – DMM