2011-10-19 98 views
0

我有一個程序,我必須從命令行獲取路徑作爲輸入,可能使用通配符(如?,*和**)。 Java堅持自己擴展這些路徑,通常是搞砸了。阻止java處理路徑通配符

例如:

java -jar myapp.jar C:/Hello/World/* 

給了我一個字串[] args,看起來像這樣:

["C:\Hello\World\foo", "C:\Hello\World\bar"] 

這不僅是非常麻煩的,這也打亂了**通配符:

java -jar myapp.jar C:/Hello/World/** 

與以前相同,當**應該是一個遞歸搜索。我有一個高效的算法,我最初是在python上開發的,但如果我不能使用它,這是毫無意義的。有沒有辦法來防止這種情況發生?我試過使用不同的shell(PowerShell,cmd,eclipse),使用不同的格式(不包括引號,引號,雙引號),並且它們都不起作用。

回答

0

這可能是完全錯誤的,但試試這個:

java -jar myapp.jar C:/Hello/World/\*

+0

即使是工作(不),它不會是用戶友好的。 – elite5472

5

的Java沒有這樣做,這是你的shell。

報價參數:

java -jar myapp.jar 'C:/Hello/World/**' 

或者

java -jar myapp.jar "C:/Hello/World/**" 
+0

使用雙引號做了同樣的事情(我試過)。使用單引號結束了引號進入字符串。我想,至少我可以爲此做一些工作。 – elite5472

+0

是的。實際上,我正在嘗試使用Powershell和Eclipse。 Eclipse會忽略引號,只是放入所有內容,Powershell會識別引號,然後引用與雙引號相同的內容。 – elite5472

+0

通配符擴展不由Windows上的shell執行,它由應用程序執行。 (實際上,shell甚至不會在Windows上執行命令行參數拆分,shell只是將整個命令行提供給應用程序,儘管libc通常會爲您將它分割爲argv數組。)我的猜測是JVM試圖通過爲應用程序進行模式擴展來模擬類似於UNIX的行爲。 –