Java命令行界面(第8部分):Argparse4j
Argparse4j是“ Java命令行參數解析器庫”,其主頁描述為“基于Python的argparse模塊的Java命令行參數解析器庫”。 在本文中,我將簡要介紹如何使用Argparse4j 0.7.0處理命令行參數,該參數與本系列中的前七篇有關Java命令行處理的文章中所解析的相似。
可以通過ArgumentParser接口及其addArgument(String ...)方法完成使用Argparse4j進行命令行處理的參數“定義”階段 。 addArgument(String...)方法的返回類型是Argument接口的實例。 該接口的實現(通常是ArgumentImpl )提供了用于設置每個參數的特征的方法。 因為這些方法中的每一個都返回一個Argument實例,所以這些調用可以以非常流暢的方式鏈接在一起。 下一個屏幕快照對此進行了演示。
Argparse4j的“定義”階段
final ArgumentParser argumentParser =ArgumentParsers.newArgumentParser("Main", true); argumentParser.addArgument("-f", "--file").dest("file").required(true).help("Path and name of file"); argumentParser.addArgument("-v", "--verbose").dest("verbose").type(Boolean.class).nargs("?").setConst(true).help("Enable verbose output.");在上面的代碼清單中,使用靜態初始化方法實例化了ArgumentParser實例,該實例需要一個String參數來表示使用或幫助輸出中將包含的腳本或程序名稱 。 ArgumentParsers的newArgumentParse(String,boolean)方法的第二個參數指定將自動支持“幫助”選項 -h和--help 。
上面的代碼清單中定義的第一個參數允許在命令行上指定文件路徑和名稱。 字符串“ -f”和“ -file”被傳遞到addArgument(String...)方法,這意味著-f或--file可以在命令行上用于指定文件路徑和名稱。 在作為第一個參數的說明的一部分而創建的Argument實例上,調用了另外三個方法[ dest(String) , required(boolean)和help(String) ]。 這三個方法分別指定一個名稱,可以在代碼中引用該參數,該參數必須出現在命令行中,以及在請求該參數的幫助時要顯示的字符串。
上面的代碼清單中定義的第二個參數將字符串“ -v”和“ -verbose”傳遞給addArgument(String...)方法,以允許該參數在命令行上使用短選項或長選項名表示。 。 像第一個參數一樣,該名稱的名稱將由dest(String)方法設置的代碼中引用,并使用help(String)方法為“ help”輸出指定其字符串。 第二個參數不是必需的,因此這里required(boolean)方法。
第二個參數的定義在Argument上有一些其他方法稱為。 我使用type(Class <T>)演示了顯式指定參數所需的Java數據類型的功能。 我還需要指定nargs(String)和setConst(Object)方法的組合,以指定verbosity參數不需要該標志提供的值。 這使我可以在期望明確說明的那些選項之后指定-v或--verbose ,而沒有“ true”或“ false”。
argparse4j通過調用ArgumentParser的parseArgs(String [])方法來支持命令行處理的“解析”階段。 下一個代碼清單演示了這一點。
使用Argparse4j“解析”命令行參數
final Namespace response = argumentParser.parseArgs(arguments);解析僅需要一個語句,并返回Namespace的實例。
使用Argparse4j進行命令行處理的“詢問”階段涉及從Namespace實例包裝的Map中訪問已解析的命令行參數。 該映射的鍵是使用dest(String)方法指定的字符串,并且映射的值是與那些參數名稱關聯的值。 在下一個代碼清單中將演示如何查詢這些值。
用Argparse4j“詢問”命令行參數
final String filePathAndName = response.getString("file"); final Boolean verbositySet = response.getBoolean("verbose");out.println("Path/name of file is '" + filePathAndName+ "' and verbosity is "+ (Boolean.TRUE.equals(verbositySet) ? "SET" : "NOT SET")+ ".");在剛剛列出的代碼中,使用了“文件”和“詳細”鍵,因為在定義預期參數時, dest(String)方法提供了相同的字符串。
可以從GitHub上看到提取上述代碼段的完整源代碼。
下一個屏幕快照演示了不帶任何參數的簡單Java應用程序的運行以及顯示的有關缺少的必需“文件”參數的消息。
上面的屏幕快照中顯示的所有大寫“ FILE”來自在定義預期參數時在dest(String)方法中指定的dest(String) 。 換句話說,該dest(String)規范既設置了用于在內部鍵入參數映射的字符串,又設置了顯示在幫助/用法中的目標字符串。
下一個屏幕快照展示了“文件”和“詳細”選項的典型用法的幾種變體。
最終的屏幕快照演示了為-h或--help選項提供的幫助信息,因為ArgumentParser的原始實例是使用“ addHelp”參數設置為true 。
在選擇框架或庫來幫助Java進行命令行分析時,需要考慮Argparse4j的一些其他特征。
- Argparse4j是開放源代碼,并已獲得MIT許可證 。
- argparse4j-0.7.0.jar (2015年12月)的大小約為89 KB,并且沒有其他第三方庫依賴項。
- Argparse4j不使用注釋。
- 聯機文檔包含Clojure示例 。
- 我懷疑使用Python(特別是如果使用argparse )編寫腳本的Java開發人員在需要解析命令行參數的Java應用程序中使用argparse4j時會獲得好處。
- (我發現在Java中處理命令行參數時, Apache Commons CLI很直觀,因為與Java中相比,我在Groovy中解析命令行參數的頻率更高,并且Groovy提供了內置的Apache Commons CLI支持)
- Argparse4j啟發了 Scala的argparse4s 的開發 。
Argparse4j只是許多基于Java的命令行處理庫之一。 argparse4j的獨特之處在于它的argparse傳統,這使它與眾多其他選擇大相徑庭。 鑒于此,我相信最可能選擇Argparse4j來滿足其Java命令行處理需求的Java開發人員將是那些經常使用argparse在基于Python的腳本和工具中解析命令行參數的開發人員,或者更喜歡Python和argparse的命令解析語義的那些開發人員。 。
其他參考
- Argparse4j
- Argparse4j用戶手冊
- Argparse4j示例
- Argparse4j API文檔 (Javadoc)
- Argparse4j源于GitHub
- Argparse4j版本 (下載)
- Argparse4j 0.7.0 (Maven)
翻譯自: https://www.javacodegeeks.com/2017/07/java-command-line-interfaces-part-8-argparse4j.html
總結
以上是生活随笔為你收集整理的Java命令行界面(第8部分):Argparse4j的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 骨骼怎么读 骨骼正确读音
- 下一篇: 好主意用英语怎么说 好主意的英语是什么