Java命令行界面(第9部分):parse-cmd
parse-cmd庫由單個類ParseCmd.java組成,該類是“用于在Java應用程序中定義和解析命令行參數的Java類。” 該庫托管在Google Code存檔上 ,因此可以隨時關閉 。 該JAR似乎也可以在GitHub上使用 。 這篇文章介紹了如何使用parse-cmd 0.0.93處理Java中的命令行參數。
parse-cmd Requirement Wiki列出了幾種用于處理Java命令行參數的替代方法,包括本系列前面已介紹的替代方法。 在列出這些選擇之后,它指出:“查看這些和其他條目,是時候嘗試另一個解析器了。” 然后,文檔繼續描述parse-cmd試圖滿足的要求。
下一個(不完整的)代碼清單演示了使用parse-cmd解析命令行參數的“定義”階段。 [請注意,本文中的示例與本系列的前八篇文章中的示例相似。]
parse-cmd的“定義”階段
/** String displayed where there is a problem processing arguments. */ private final static String USAGE ="java examples.dustin.commandline.parsecmd.Main --file <filePathAndName> [--verbose 1]";public static void main(final String[] arguments) {final ParseCmd parseCmd= new ParseCmd.Builder().parm("--file", "").req().parm("--verbose", "0").help(USAGE).build();代碼清單演示了使用ParseCmd.Builder()和該類實例上可用的流利方法的預期命令行參數的定義。 每個方法依次返回同一Builder類的實例,以便可以將這些方法調用鏈接在一起,如上所示。 如上所示,用法/幫助字符串是手動構建的,并通過help(String)方法提供給Builder ,而不是由parse-cmd自動構建。
ParseCmd.Builder類的parm方法已重載,但是在此代碼清單中,我使用了parm(String, String)方法parm(String, String)該方法接受參數名稱和該參數的“默認”值。 如果我僅向該方法提供一個字符串,僅接受一個字符串,則該參數的默認值假定為“ 1”。 對于文件路徑和名稱參數,這可能導致parse-cmd假定參數類型錯誤。 通過顯式提供默認的空字符串,parse-cmd可以將文件路徑和名稱的參數準確地視為可變長度字符串。
上面的代碼中也定義了--verbose參數,并且還提供了默認值,因為如果沒有提供參數,則隱式默認值“ 1”將使冗長性“ on”,并且不是默認值。使用Java進行命令行分析的系列文章中的任何早期文章。
在Builder一個鏈式返回實例上調用req()表示需要先前定義的參數( --file )。 另一個參數( --verbose )沒有指定此參數,因此隱式默認為可選。
據我所知,使用parse-cmd為定義的命令行參數指定別名或同義詞并不容易。 換句話說,我沒有辦法告訴parse-cmd --file和-f是相同的命令行參數。 因此,在此示例中,我僅對參數--file和--verbose使用帶雙連字符的“ long”版本。
在本系列中介紹了以前的基于Java的命令行解析庫之后,“解析”階段緊隨“定義”階段之后。 盡管可以使用parse-cmd進行相同的轉換,但廣告且首選的方法是在“定義”階段之后和“解析”階段之前實施“驗證”階段。 此階段使您可以查看在驗證可用命令行參數期間是否發現任何錯誤,并在下一個(不完整的)代碼清單中進行演示。
parse-cmd的“驗證”階段
final String errorString = parseCmd.validate(arguments); if (!errorString.isEmpty()) {out.println("ERROR: " + errorString); }剛剛顯示的代碼清單演示了ParseCmd.validate(String[])方法的使用,該方法用于驗證命令行參數是否與“定義”階段中定義的預期參數匹配。 如果有任何意外結果,則返回非空字符串。 空的String被認為是一件好事,它表示“有效”命令行參數。
使用有效的參數,下一步可以“解析”這些命令行參數,如下面的單行代碼清單所示。
使用parse-cmd進行“解析”階段
final Map<String, String> parsedArguments = parseCmd.parse(arguments);調用ParseCmd.parse(String[])是參數名稱到參數值的Java Map<String, String> 。
通過簡單地訪問解析階段返回的Map<String, String>即可實現parse-cmd的“詢問”階段。 可以通過參數名稱查詢地圖的鍵,并且返回的值是與該參數名稱關聯的值。 請注意,這意味著所有參數,甚至是像--verbose類的“布爾”參數,都具有與之關聯的值,而不是唯一需要的標志是否存在。 換句話說,-- --verbose在命令行上表示時必須后面跟一個值。 在下面的代碼清單中演示了在這種情況下對兩個預期參數的詢問。
parse-cmd的“審訊”階段
final Map<String, String> parsedArguments = parseCmd.parse(arguments); final String filePathAndName = parsedArguments.get("--file");out.println("The path/name of the file is '" + filePathAndName+ "' and verbosity is set to '" + parsedArguments.get("--verbose") + "'.");GitHub上提供了示例的完整代碼清單,該示例的片段已在本文中顯示。
下一個屏幕快照演示了未提供必需的命令行參數( --file )時顯示的消息。
下面的屏幕快照演示了--file和--verbose命令行參數的基于parse-cmd的命令行處理的成功應用。
在選擇框架或庫來幫助Java進行命令行解析時,需要考慮parse-cmd的一些其他特征。
- parse-cmd是帶有Apache License 2.0的開源。
- parse-cmd托管在Google代碼檔案庫中 ,該檔案庫可隨時被“拒絕”(當前狀態為“將于2016年初被拒絕”)。
- parsecmd-0.0.93.jar JAR文件的大小約為50 KB。
- parse-cmd采用流暢的Builder實現,而不使用注釋。
parse-cmd是(當前)另一個Java庫,可供需要處理命令行參數的Java開發人員使用。 它使用一些假設和含義來做出一些決策。 parse-cmd的作者寫道,盡管“已有幾種基于Java的命令行解析解決方案可用”,但parse-cmd仍是編寫的,因為“它們通常都很難學習和使用。”
其他參考
- 解析cmd
- parse-cmd來源
- parse-cmd下載
- parse-cmd – Requirement.wiki
- parse-cmd – sampleSource.wiki
翻譯自: https://www.javacodegeeks.com/2017/07/java-command-line-interfaces-part-9-parse-cmd.html
總結
以上是生活随笔為你收集整理的Java命令行界面(第9部分):parse-cmd的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HORI 推出《太鼓之达人》专用太鼓控制
- 下一篇: java permgen_Java 8: