我編寫了很多java工具,它們從命令行獲取饋送信息,java提供通過main(args[])
訪問的信息。有問題的應用程序通常是Windows工具(從命令行或批處理文件運行)。在Java中處理命令行數據(args []的替代方法)
從我從痛苦的經歷中學到的東西,Windows會根據實際調用的數據對參數數據進行自己的(有時是蹩腳的)轉換和轉換。然後,它被派上了Java,它自己進行解析和處理,最終爲您呈現了args[]
。正是這種多層次的解析\預處理,目前正在讓我感到悲傷,因爲它並不總是清楚事情在哪裏受到破壞。
我的第一個問題是在實際解析\轉換之前Java實際做了什麼嗎?從我可以收集的內容來看,它只需要操作系統提供的參數數據(我知道它只是一個長字符串),並根據空格(製表符,空格字符)對其進行分隔。這很簡單嗎?
第二個問題,是否有可能獲得未處理的命令行數據,因爲它傳遞給Java?雖然通過空格拆分參數通常很方便,但當您開始添加更復雜的安排時,它會崩潰。因此"-foo=bar"
可能最終爲"-foo="
"bar"
或"-foo"
"="
"bar"
或"-foo"
"=bar"
,具體取決於白空風吹來的方式。如果在我的第一個問題中做出的假設是正確的,那麼您可以通過在args中的每個元素之間插入一個空格來構建一個字符串,但是如果完成了其他處理,那麼訪問原始參數將變得更有用。
作爲最後一點,我知道已經有大量的庫可用於處理Java中的命令行數據。我應該在某個時候開始使用其中的一個,但現在我只想了解正在做什麼,以及Java本身提供了什麼替代方案(如果有的話)。
「什麼實際的解析\轉換做的Java實際上在參與之前做了「沒有。你得到任何通過你的shell。 –
'所以「-foo = bar」可能會變成「-foo =」「bar」或「-foo」「=」「bar」或「-foo」「= bar」' - 你有工作嗎?例子說明'-foo = bar'作爲'args []'中的''-foo = bar「'被傳遞的其他東西嗎? –
另請參閱http://stackoverflow.com/questions/27923366/how-does-the-jvm-determine-the-default-character-encoding-for-argv-on-linux – Raedwald