Java命令行界面(第9部分):parse-cmd
parse-cmd庫(kù)由單個(gè)類ParseCmd.java組成,該類是“用于在Java應(yīng)用程序中定義和解析命令行參數(shù)的Java類?!?該庫(kù)托管在Google Code存檔上 ,因此可以隨時(shí)關(guān)閉 。 該JAR似乎也可以在GitHub上使用 。 這篇文章介紹了如何使用parse-cmd 0.0.93處理Java中的命令行參數(shù)。
parse-cmd Requirement Wiki列出了幾種用于處理Java命令行參數(shù)的替代方法,包括本系列前面已介紹的替代方法。 在列出這些選擇之后,它指出:“查看這些和其他條目,是時(shí)候嘗試另一個(gè)解析器了?!?然后,文檔繼續(xù)描述parse-cmd試圖滿足的要求。
下一個(gè)(不完整的)代碼清單演示了使用parse-cmd解析命令行參數(shù)的“定義”階段。 [請(qǐng)注意,本文中的示例與本系列的前八篇文章中的示例相似。]
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()和該類實(shí)例上可用的流利方法的預(yù)期命令行參數(shù)的定義。 每個(gè)方法依次返回同一Builder類的實(shí)例,以便可以將這些方法調(diào)用鏈接在一起,如上所示。 如上所示,用法/幫助字符串是手動(dòng)構(gòu)建的,并通過help(String)方法提供給Builder ,而不是由parse-cmd自動(dòng)構(gòu)建。
ParseCmd.Builder類的parm方法已重載,但是在此代碼清單中,我使用了parm(String, String)方法parm(String, String)該方法接受參數(shù)名稱和該參數(shù)的“默認(rèn)”值。 如果我僅向該方法提供一個(gè)字符串,僅接受一個(gè)字符串,則該參數(shù)的默認(rèn)值假定為“ 1”。 對(duì)于文件路徑和名稱參數(shù),這可能導(dǎo)致parse-cmd假定參數(shù)類型錯(cuò)誤。 通過顯式提供默認(rèn)的空字符串,parse-cmd可以將文件路徑和名稱的參數(shù)準(zhǔn)確地視為可變長(zhǎng)度字符串。
上面的代碼中也定義了--verbose參數(shù),并且還提供了默認(rèn)值,因?yàn)槿绻麤]有提供參數(shù),則隱式默認(rèn)值“ 1”將使冗長(zhǎng)性“ on”,并且不是默認(rèn)值。使用Java進(jìn)行命令行分析的系列文章中的任何早期文章。
在Builder一個(gè)鏈?zhǔn)椒祷貙?shí)例上調(diào)用req()表示需要先前定義的參數(shù)( --file )。 另一個(gè)參數(shù)( --verbose )沒有指定此參數(shù),因此隱式默認(rèn)為可選。
據(jù)我所知,使用parse-cmd為定義的命令行參數(shù)指定別名或同義詞并不容易。 換句話說,我沒有辦法告訴parse-cmd --file和-f是相同的命令行參數(shù)。 因此,在此示例中,我僅對(duì)參數(shù)--file和--verbose使用帶雙連字符的“ long”版本。
在本系列中介紹了以前的基于Java的命令行解析庫(kù)之后,“解析”階段緊隨“定義”階段之后。 盡管可以使用parse-cmd進(jìn)行相同的轉(zhuǎn)換,但廣告且首選的方法是在“定義”階段之后和“解析”階段之前實(shí)施“驗(yàn)證”階段。 此階段使您可以查看在驗(yàn)證可用命令行參數(shù)期間是否發(fā)現(xiàn)任何錯(cuò)誤,并在下一個(gè)(不完整的)代碼清單中進(jìn)行演示。
parse-cmd的“驗(yàn)證”階段
final String errorString = parseCmd.validate(arguments); if (!errorString.isEmpty()) {out.println("ERROR: " + errorString); }剛剛顯示的代碼清單演示了ParseCmd.validate(String[])方法的使用,該方法用于驗(yàn)證命令行參數(shù)是否與“定義”階段中定義的預(yù)期參數(shù)匹配。 如果有任何意外結(jié)果,則返回非空字符串。 空的String被認(rèn)為是一件好事,它表示“有效”命令行參數(shù)。
使用有效的參數(shù),下一步可以“解析”這些命令行參數(shù),如下面的單行代碼清單所示。
使用parse-cmd進(jìn)行“解析”階段
final Map<String, String> parsedArguments = parseCmd.parse(arguments);調(diào)用ParseCmd.parse(String[])是參數(shù)名稱到參數(shù)值的Java Map<String, String> 。
通過簡(jiǎn)單地訪問解析階段返回的Map<String, String>即可實(shí)現(xiàn)parse-cmd的“詢問”階段。 可以通過參數(shù)名稱查詢地圖的鍵,并且返回的值是與該參數(shù)名稱關(guān)聯(lián)的值。 請(qǐng)注意,這意味著所有參數(shù),甚至是像--verbose類的“布爾”參數(shù),都具有與之關(guān)聯(lián)的值,而不是唯一需要的標(biāo)志是否存在。 換句話說,-- --verbose在命令行上表示時(shí)必須后面跟一個(gè)值。 在下面的代碼清單中演示了在這種情況下對(duì)兩個(gè)預(yù)期參數(shù)的詢問。
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上提供了示例的完整代碼清單,該示例的片段已在本文中顯示。
下一個(gè)屏幕快照演示了未提供必需的命令行參數(shù)( --file )時(shí)顯示的消息。
下面的屏幕快照演示了--file和--verbose命令行參數(shù)的基于parse-cmd的命令行處理的成功應(yīng)用。
在選擇框架或庫(kù)來幫助Java進(jìn)行命令行解析時(shí),需要考慮parse-cmd的一些其他特征。
- parse-cmd是帶有Apache License 2.0的開源。
- parse-cmd托管在Google代碼檔案庫(kù)中 ,該檔案庫(kù)可隨時(shí)被“拒絕”(當(dāng)前狀態(tài)為“將于2016年初被拒絕”)。
- parsecmd-0.0.93.jar JAR文件的大小約為50 KB。
- parse-cmd采用流暢的Builder實(shí)現(xiàn),而不使用注釋。
parse-cmd是(當(dāng)前)另一個(gè)Java庫(kù),可供需要處理命令行參數(shù)的Java開發(fā)人員使用。 它使用一些假設(shè)和含義來做出一些決策。 parse-cmd的作者寫道,盡管“已有幾種基于Java的命令行解析解決方案可用”,但parse-cmd仍是編寫的,因?yàn)椤八鼈兺ǔ6己茈y學(xué)習(xí)和使用?!?
其他參考
- 解析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
總結(jié)
以上是生活随笔為你收集整理的Java命令行界面(第9部分):parse-cmd的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: HORI 推出《太鼓之达人》专用太鼓控制
- 下一篇: java permgen_Java 8: