2016-10-28 91 views
0

我有一個接收路徑作爲命令行參數的應用程序。該路徑可以包含空格,因此可以用引號引起來。我需要驗證,如果這條道路是正確的,所以我執行從「File」類「存在」的方法:奇怪的java命令行文件夾路徑問題

public static void main (String... args) { 
    System.out.println("arg=" + args[0]); 
    File f = new File(args[0]); 
    System.out.println("exists=" + f.exists()); 
} 

當我運行與後續參數的應用程序,我得到這個結果(假設「C: \文件夾「存在)。用最後的斜槓和引號注意:

> java Test c:\folder 
args=c:\folder 
exists=true 

> java Test c:\folder\ 
args=c:\folder\ 
exists=true 

> java Test "c:\folder" 
args=c:\folder 
exists=true 

> java Test "c:\folder\" 
args=c:\folder 
exists=false 

我不明白最後一個例子會發生什麼。首先在args結果中不打印最終斜槓,然後File類表示該路徑不存在。沒有引號的第二個例子效果很好。 參數路徑有一個免費的用戶版本,所以它可能包含引號(如果路徑包含帶空格的文件夾)和最後一個斜槓。

+5

\」是逃脫的「。研究角色轉義。 – rmlan

+0

你能解決這個問題嗎? – ItamarG3

+0

似乎talex解決方案的工作,但最後兩個斜線這有點醜陋。無論如何,我還沒有找到任何更好的方法來處理這個問題。 – user1151816

回答

2

這不是java問題,而是你的shell。如果在Windows中使用"之前使用\作爲轉義字符。要解決這個問題,你可以寫參數爲"c:\folder\\"

這也是一個奇怪的輸出。當我做同樣的事情時,我在最後一個案例中得到了args=c:\folder"。 「