2014-01-23 90 views
0

我在下面的代碼中偶然發現了一些奇怪的東西。我想使用Runtime.getRuntime().exec("some command").waitFor();語句在Java中打開一個* .pdf文件。用雙倍空間在Java中打開PDF文件

public static void main(String[] args) { 
    File file = new File("C:\\test123.pdf"); 

    try { 
     Runtime.getRuntime() 
       .exec("rundll32 url.dll,FileProtocolHandler " + file.toString()) 
       .waitFor(); 
    } 
    catch (IOException e) { 
     // do something 
    } 
    catch (InterruptedException e) { 
     // do something 
    } 
} 

現在,當路徑包含單個空格,如​​它工作正常,但如果我在某些地方添加第二個空間,像

new File("C:\two spaces")
這是行不通的,但它也不會放棄在警告或錯誤運行。它只是沒有做任何事情...

首先,有人可以解釋爲什麼這不起作用?第二,是否有可能解決這個問題,如果是的話(但不是解決方案如'刪除第二個空間')?

非常感謝您的幫助!

+0

也許換到單引號中文件的路徑?此外,它可能會做某些事情...嘗試使用Process和ProcessInfo對象,將STDOut和Err流重定向到控制檯。或者在windows中使用>>操作符,然後在文本文件的路徑中作爲.exe調用中字符串的最後部分,以指示該過程的輸出。我敢打賭,第二個空間讓shell在第一個空間切換到命令之後思考一切,並且拋出一個錯誤。 –

回答

1

的Windows,包含特殊字符的文件名保存在一個特殊格式兼容舊系統說明白只有格式FATFAT16,其中有大小文件名8.3 - 文件名字符+ -字符擴展名。

對於這個表FAT32使用短名稱的標準FAT表(即名稱中8.3格式),指示該文件也有一個長文件名的特殊格式記錄系統。

因此,使用終端仿真器Windows中的文件,您可以使用長和短的名稱來引用文件。長名稱如果包含空格,則必須用雙引號括起來。

又見

+0

感謝您的回答。你指出的問題幫了我很多!顯然我必須使用'Runtime.getRuntime()。exec(「cmd/c start \」\「\」「+ file.getAbsolutePath()+」\「」。split(「」));'。我完全不知道這個命令做什麼,但它的工作原理! – RvanHeest