精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

使用 commons-cli 解析 Java 中的命令行選項

開發 前端
通常向終端中輸入命令時,無論是啟動 GUI 應用程序還是僅啟動終端應用程序,都可以使用 命令行選項options or switches or flags (以下簡稱選項)來修改應用程序的運行方式。這是 POSIX 規范 設定的標準,因此能夠檢測和解析選項對 Java 程序員而言是很有用的技能。

讓用戶用命令行選項調整你的 Java 應用程序運行方式。

[[418479]]

通常向終端中輸入命令時,無論是啟動 GUI 應用程序還是僅啟動終端應用程序,都可以使用 命令行選項options or switches or flags (以下簡稱選項)來修改應用程序的運行方式。這是 POSIX 規范 設定的標準,因此能夠檢測和解析選項對 Java 程序員而言是很有用的技能。

Java 中有若干種解析選項的方法,其中我最喜歡用的是 Apache Commons CLI 庫,簡稱 commons-cli。

安裝 commons-cli

如果你使用類似 Maven 之類的項目管理系統以及集成開發環境Integrated Development Environment(簡稱 IDE),可以在項目屬性(比如 pom.xml 配置文件或者 Eclipse 和 NetBeans 的配置選項卡)中安裝 Apache Commons CLI 庫。

而如果你采用手動方式管理庫,則可以從 Apache 網站下載 該庫的最新版本。下載到本地的是幾個捆綁在一起的 JAR 文件,你只需要其中的一個文件 commons-cli-X.Y.jar(其中 X 和 Y 代指最新版本號)。把這個 JAR 文件或手動或使用 IDE 添加到項目,就可以在代碼中使用了。

將庫導入至 Java 代碼

在使用 commons-cli 庫之前,必須首先導入它。對于本次選項解析的簡單示例而言,可以先在 Main.java 文件中簡單寫入以下標準代碼:

  1. package com.opensource.myoptparser; 
  2. import org.apache.commons.cli.*; 
  3. public class Main { 
  4.     public static void main(String[] args) { 
  5.     // code  
  6.     } 

至此在 Java 中解析選項的準備工作已經做好了。

在 Java 中定義布爾選項

要實現解析選項,首先要定義應用程序可接收的有效選項。使用 Option(注意是單數)類來創建選項對象,使用 Options(注意是復數)類來追蹤項目中創建的所有選項。

首先為選項創建一個組,按照慣例命名為 options:

  1. //code 
  2. Options options = new Options(); 

接下來,通過列出短選項(即選項名簡寫)、長選項(即全寫)、默認布爾值(LCTT 譯注:設置是否需要選項參數,指定為 false 時此選項不帶參,即為布爾選項)和幫助信息來定義選項,然后設置該選項是否為必需項(LCTT 譯注:下方創建 alpha 對象的代碼中未手動設置此項),最后將該選項添加到包含所有選項的 options 組對象中。在下面幾行代碼中,我只創建了一個選項,命名為 alpha:

  1. //define options 
  2.  Option alpha = new Option("a""alpha"false"Activate feature alpha"); 
  3.  options.addOption(alpha); 

在 Java 中定義帶參選項

有時用戶需要通過選項提供 true 或 false 以外的信息,比如給出配置文件、輸入文件或諸如日期、顏色這樣的設置項值。這種情況可以使用 builder 方法,根據選項名簡寫為其創建屬性(例如,-c 是短選項,--config 是長選項)。完成定義后,再將定義好的選項添加到 options 組中:

  1. Option config = Option.builder("c").longOpt("config"
  2.     .argName("config"
  3.     .hasArg() 
  4.     .required(true
  5.     .desc("set config file").build(); 
  6. options.addOption(config); 

builder 函數可以用來設置短選項、長選項、是否為必需項(本段代碼中必需項設置為 true,也就意味著用戶啟動程序時必須提供此選項,否則應用程序無法運行)、幫助信息等。

使用 Java 解析選項

定義并添加所有可能用到的選項后,需要對用戶提供的參數進行迭代處理,檢測是否有參數同預設的有效短選項列表中的內容相匹配。為此要創建命令行 CommandLine 本身的一個實例,其中包含用戶提供的所有參數(包含有效選項和無效選項)。為了處理這些參數,還要創建一個 CommandLineParser 對象,我在代碼中將其命名為 parser。最后,還可以創建一個 HelpFormatter 對象(我將其命名為 helper),當參數中缺少某些必需項或者用戶使用 --help 或 -h 選項時,此對象可以自動向用戶提供一些有用的信息。

  1. // define parser 
  2.     CommandLine cmd; 
  3.     CommandLineParser parser = new BasicParser(); 
  4.     HelpFormatter helper = new HelpFormatter(); 

最后,添加一些條件判斷來分析用戶提供的選項,我們假設這些選項已經作為命令行輸入被獲取并存儲在 cmd 變量中。這個示例應用程序有兩種不同類型的選項,但對這兩種類型都可以使用 .hasOption 方法加上短選項名稱來檢測選項是否存在。檢測到一個存在的選項后,就可以對數據做進一步操作了。

  1. try { 
  2.     cmd = parser.parse(options, args); 
  3.     if(cmd.hasOption("a")) { 
  4.     System.out.println("Alpha activated"); 
  5.     } 
  6.     if (cmd.hasOption("c")) { 
  7.     String opt_config = cmd.getOptionValue("config"); 
  8.     System.out.println("Config set to " + opt_config); 
  9.     } 
  10. } catch (ParseException e) { 
  11.     System.out.println(e.getMessage()); 
  12.     helper.printHelp("Usage:", options); 
  13.     System.exit(0); 

解析過程有可能會產生錯誤,因為有時可能缺少某些必需項如本例中的 -c 或 --config 選項。這時程序會打印一條幫助信息,并立即結束運行。考慮到此錯誤(Java 術語中稱為異常),在 main 方法的開頭要添加語句聲明可能的異常:

  1. public static void main(String[] args) throws ParseException { 

示例程序至此就大功告成了。

測試代碼

你可以通過調整傳遞給代碼的默認參數來在 IDE 中測試應用程序,或者創建一個 JAR 文件并在終端運行測試。這個過程可能會因 IDE 的不同而不同。具體請參閱相應的 IDE 文檔,以及我寫過的關于如何創建 JAR 文件的文章,或者參考 Daniel Oh 的關于如何使用 Maven 執行同樣操作的文章。

首先,省略必需項 -c 或 --config 選項,檢測解析器的異常處理:

  1. $ java -jar dist/myapp.jar                  
  2. Missing required option: c 
  3. usage: Usage: 
  4.  -a,--alpha             Activate feature alpha 
  5.  -c,--config <config>   Set config file 

然后提供輸入選項再進行測試:

  1. java -jar dist/myantapp.jar --config foo -a 
  2. Alpha activated 
  3. Config set to foo 

選項解析

為用戶提供選項功能對任何應用程序來說都是很重要的。有了 Java 和 Apache Commons,要實現這個功能并不難。

以下是完整的演示代碼,供讀者參考:

  1. package com.opensource.myapp; 
  2. import org.apache.commons.cli.*; 
  3. public class Main { 
  4.      
  5.     /** 
  6.      * @param args the command line arguments 
  7.      * @throws org.apache.commons.cli.ParseException 
  8.      */  
  9.     public static void main(String[] args) throws ParseException { 
  10.         // define options 
  11.         Options options = new Options(); 
  12.          
  13.         Option alpha = new Option("a""alpha"false"Activate feature alpha"); 
  14.         options.addOption(alpha); 
  15.          
  16.         Option config = Option.builder("c").longOpt("config"
  17.                 .argName("config"
  18.                 .hasArg() 
  19.                 .required(true
  20.                 .desc("Set config file").build(); 
  21.         options.addOption(config); 
  22.       
  23.         // define parser 
  24.         CommandLine cmd; 
  25.         CommandLineParser parser = new BasicParser(); 
  26.         HelpFormatter helper = new HelpFormatter(); 
  27.         try { 
  28.             cmd = parser.parse(options, args); 
  29.             if(cmd.hasOption("a")) { 
  30.                 System.out.println("Alpha activated"); 
  31.             } 
  32.            
  33.             if (cmd.hasOption("c")) { 
  34.                 String opt_config = cmd.getOptionValue("config"); 
  35.                 System.out.println("Config set to " + opt_config); 
  36.             } 
  37.         } catch (ParseException e) { 
  38.             System.out.println(e.getMessage()); 
  39.             helper.printHelp("Usage:", options); 
  40.             System.exit(0); 
  41.         } 
  42.     } 

使用 Java 和選項

選項使用戶可以調整命令的工作方式。使用 Java 時解析選項的方法有很多,其中之一的 commons-cli 是一個強大而靈活的開源解決方案。記得在你的下一個 Java 項目中嘗試一下哦。

責任編輯:未麗燕 來源: Linux.cn
相關推薦

2021-08-30 07:50:42

腳本語言命令行

2017-12-19 06:39:06

命令行界面CLIIT

2023-03-02 19:36:34

C語言

2018-01-24 18:30:53

瀏覽器Firefox命令行

2009-07-20 09:55:30

華為命令行解析華為認證

2010-08-20 10:05:23

用戶命令

2009-07-15 17:10:26

Jython解析命令行

2010-07-15 10:47:22

Perl命令行

2021-11-15 14:30:49

Pythonargparse編程語言

2022-08-23 14:23:29

Vue.js命令行前端

2021-11-08 10:45:07

Python命令工具

2010-01-27 14:01:19

Android命令行啟

2010-07-15 11:08:23

Perl命令行

2021-07-29 10:00:43

XMLXMLStarletLinux

2011-01-18 19:11:26

Postfix命令行

2021-01-13 05:29:26

命令行

2010-04-09 16:16:17

Oracle 10G

2011-01-17 11:12:54

華為認證

2023-07-05 08:38:48

GolangGo語言

2010-07-15 10:58:23

Perl命令行程序
點贊
收藏

51CTO技術棧公眾號

欧美精品欧美极品欧美激情| 亚洲黄色网址在线观看| 天天干天天操天天爱| 精品久久不卡| 欧美乱熟臀69xxxxxx| 天堂а√在线中文在线| 色播色播色播色播色播在线| 日韩成人免费在线| 欧美久久精品午夜青青大伊人| 日本国产在线视频| 岛国一区二区| 亚洲国产日日夜夜| 亚洲春色综合另类校园电影| 亚洲精品久久久久久无码色欲四季| 免费视频一区二区三区在线观看| 色偷偷91综合久久噜噜| 北岛玲一区二区| 99久久99九九99九九九| 色综合久久88色综合天天免费| 亚洲一区二区三区四区中文| 无码国产精品一区二区色情男同| 久久国产视频网| 欧美性受xxxx黑人猛交| 综合五月激情网| 国产不卡av一区二区| 欧美大片在线观看一区| 日韩一区二区三区不卡视频| 国产资源在线观看入口av| 1区2区3区精品视频| 欧美在线一二三区| 亚洲狼人综合网| 精品一区二区成人精品| 国产91热爆ts人妖在线| 国产精品16p| 综合一区av| xvideos国产精品| 公肉吊粗大爽色翁浪妇视频| 美日韩黄色大片| 精品久久久久久久久久久久久久久 | 亚洲产国偷v产偷v自拍涩爱| 久久精品久久精品| 国产精品99久久久久久人| 一级片中文字幕| 亚洲区国产区| 久久久午夜视频| 国产一二三四在线| 欧美日一区二区三区在线观看国产免| 日韩一区二区在线视频| 五月天精品在线| 欧美日韩激情| 一区二区三区日韩在线| 亚洲性猛交xxxx乱大交| 亚洲最大在线| 国产视频久久久久| 日本丰满少妇裸体自慰| 精品精品精品| 亚洲国产天堂网精品网站| 老司机av网站| 成人短视频软件网站大全app| 欧美日韩国产片| 成人免费在线观看视频网站| ww久久综合久中文字幕| 欧美色综合影院| 色呦色呦色精品| 国产高清精品二区| 欧美一区三区四区| 久久久久亚洲av无码专区首jn| 91综合久久爱com| 亚洲国产精品免费| 强伦人妻一区二区三区| 成人综合久久| 久久精品中文字幕免费mv| 波多野结衣在线网址| 欧美激情无毛| 久久久天堂国产精品女人| 女人十八岁毛片| 日本在线不卡一区| 成人欧美一区二区三区在线湿哒哒| 国产口爆吞精一区二区| 国产成a人亚洲精| 国内精品一区二区| 你懂的在线免费观看| 亚洲国产精品二十页| 日本一级淫片演员| 老牛影视精品| 欧美三级视频在线| 国产chinesehd精品露脸| 国产亚洲精品美女久久| 亚洲人av在线影院| 91精品一区二区三区蜜桃| 亚洲成人原创| 国产精品老牛影院在线观看| 国产精品久久久久久久久毛片| 国产91在线观看| 日韩欧美视频一区二区| www久久日com| 日韩欧美国产网站| 国产美女18xxxx免费视频| 亚洲五码在线| 伊人久久久久久久久久久久久| www.5588.com毛片| 亚洲激情专区| 国产日韩av在线| 天堂在线观看av| 国产精品美日韩| 成人网站免费观看入口| 日本电影久久久| 日韩电影免费观看中文字幕| 久久国产高清视频| 性欧美暴力猛交另类hd| 91久久国产自产拍夜夜嗨| 国产在线色视频| 亚洲午夜一二三区视频| 日本人69视频| 欧洲毛片在线视频免费观看| 欧美劲爆第一页| 国产精品久久久久久久免费| 国产午夜亚洲精品午夜鲁丝片| 好吊色视频988gao在线观看| 免费污视频在线一区| 精品日韩一区二区三区| 精品在线观看一区| 日韩中文字幕区一区有砖一区| eeuss一区二区三区| 免费在线看a| 欧美午夜寂寞影院| 欧美熟妇精品黑人巨大一二三区| 亚洲一级淫片| 成人精品视频在线| 岛国在线大片| 色婷婷av一区二区三区软件| 污污内射在线观看一区二区少妇 | 亚洲男同性视频| 中文字幕一区二区三区四区在线视频| 欧美理论电影在线精品| 欧美极品第一页| www日本视频| 亚洲理论在线观看| 想看黄色一级片| 久久免费av| 国产剧情日韩欧美| av网站在线播放| 在线亚洲免费视频| 国产精久久一区二区三区| 久久国产成人| 蜜桃久久精品乱码一区二区| 福利影院在线看| 日韩欧美高清一区| 国产亚洲精品码| 国产suv精品一区二区三区| 最近免费观看高清韩国日本大全| 日韩色性视频| 大胆人体色综合| 国产乱码精品一区二三区蜜臂| 亚洲欧美综合网| 中文字幕亚洲影院| 欧美+亚洲+精品+三区| 91一区二区三区| 成年人视频免费在线播放| 日韩你懂的在线播放| 欧美交换国产一区内射| 成人少妇影院yyyy| 一女被多男玩喷潮视频| 精品久久久亚洲| 国产剧情日韩欧美| av网站免费在线观看| 精品美女在线播放| xxxx.国产| 国产亚洲精品福利| 五月天中文字幕在线| 午夜亚洲福利| 看高清中日韩色视频| 亚洲精品粉嫩美女一区| 色yeye香蕉凹凸一区二区av| 国产成人三级在线播放| 偷窥少妇高潮呻吟av久久免费| 欧美 变态 另类 人妖| 日韩中文字幕1| 在线视频亚洲自拍| 999久久精品| 日韩美女主播视频| 久久综合之合合综合久久| 日韩欧美高清在线| 欧美男人亚洲天堂| 亚洲免费av观看| 日本japanese极品少妇| 蜜臀91精品一区二区三区 | 日韩视频在线你懂得| 日韩精品一区二区三| 国产欧美日韩另类一区| 亚洲欧美日韩中文字幕在线观看| 国产欧美日本| 国产精品av免费| 亚洲第一福利专区| 亚洲va码欧洲m码| 国产日韩电影| 欧美精品生活片| 免费a级毛片在线观看| 欧美一区二区三区四区久久| 成年人av网站| 一区二区三区免费在线观看| 国产中年熟女高潮大集合| 国产麻豆日韩欧美久久| 黄色一级二级三级| 亚洲国产精品第一区二区| 在线综合视频网站| 亚洲制服一区| 岛国视频一区免费观看| 国产一区一一区高清不卡| 亚洲91精品在线观看| 国产剧情在线| 最近2019中文免费高清视频观看www99| 亚洲va天堂va欧美ⅴa在线| 欧美在线观看你懂的| 久久不卡免费视频| 亚洲黄色性网站| 69xxx免费| 久久人人超碰精品| 妖精视频一区二区| 国产精品影视网| 91av俱乐部| 国产亚洲永久域名| 大伊香蕉精品视频在线| 首页国产精品| 婷婷四房综合激情五月| 亚洲第一福利专区| 韩日午夜在线资源一区二区 | 日韩久久精品一区| 97视频免费在线| 精品1区2区3区| 欧美brazzers| 色噜噜狠狠色综合中国| 亚洲男人的天堂在线视频| 亚洲永久免费av| 69xx绿帽三人行| 亚洲人午夜精品天堂一二香蕉| 免费看黄色三级| 亚洲国产精品v| 亚洲天堂岛国片| 欧美激情一区二区三区蜜桃视频| 少妇大叫太粗太大爽一区二区| 99精品国产一区二区三区不卡 | 国产日本欧美一区二区| 88久久精品无码一区二区毛片| aaa亚洲精品| 亚洲精品中文字幕在线播放| 本田岬高潮一区二区三区| 人妻 日韩 欧美 综合 制服| 成人视屏免费看| 国产中文字幕一区二区| 久久夜色精品国产欧美乱极品| 中文字幕5566| 久久久99久久精品欧美| 精品无码人妻一区二区免费蜜桃 | 免费在线观看黄网站| 黄色成人av在线| 中文字幕69页| 欧美日韩欧美一区二区| 国产精品高潮呻吟av| 欧美一区二区三区视频在线观看| 亚洲国产精品国自产拍久久| 亚洲成人动漫在线播放| 欧美色综合一区二区三区| 国产午夜精品一区二区三区| 在线免费观看的av网站| 上原亚衣av一区二区三区| 粗大黑人巨茎大战欧美成人| 色综合天天综合网国产成人网| 爱搞国产精品| 国产成人在线一区二区| 91成人福利社区| 国产成人精品一区二区三区福利 | 亚洲黄色免费观看| 欧美日韩一区国产| 国产精品探花视频| 精品国产91乱码一区二区三区| 男女视频在线观看| 日韩一区二区三区xxxx| 678在线观看视频| 国产精品video| 日本精品视频| 欧美三级电影在线播放| 99久久国产综合精品成人影院| 精品国产一区二区三区无码| 日韩国产精品久久久| 韩国三级丰满少妇高潮| 91女厕偷拍女厕偷拍高清| 免费黄色国产视频| 欧美日韩精品在线视频| 亚洲中文字幕在线观看| 亚洲成人黄色网| 蜜芽在线免费观看| 97人人模人人爽人人喊中文字| 成人涩涩视频| 懂色av一区二区三区在线播放| 美女久久久久| a天堂资源在线观看| 青娱乐精品在线视频| 欧美xxxxx精品| 国产精品伦理一区二区| 国产视频91在线| 日韩一区二区三区电影在线观看 | 国产视频一区在线观看| 国产亚洲欧美久久久久| 欧美日韩久久一区| 三级在线电影| 欧美大秀在线观看| 欧洲精品久久久久毛片完整版| 精品国产综合| 中文乱码免费一区二区三区下载| 国产又黄又猛视频| 成人国产免费视频| 成熟的女同志hd| 欧美日韩精品免费观看视频| 天天综合永久入口| 欧美成人黑人xx视频免费观看| 韩国女主播一区二区| 久久精品magnetxturnbtih| 欧美精选一区| 小早川怜子一区二区三区| 国产欧美日韩精品一区| 日韩精品在线免费视频| 欧美精品一区二区精品网| av网站大全在线| 成人在线免费观看视视频| 日本在线电影一区二区三区| 国产免费人做人爱午夜视频| av高清久久久| 精品无码久久久久| 欧美大片在线观看| 中文字幕中文字幕在线十八区| 国产精品普通话| 成人毛片在线| 色多多视频在线播放| 国产拍揄自揄精品视频麻豆| 欧美一级片免费在线观看| 亚洲精品久久久久中文字幕欢迎你 | 涩多多在线观看| 日韩美女视频一区二区 | 欧美黑人疯狂性受xxxxx野外| 国内精品视频在线播放| 亚洲少妇诱惑| 人妻精品久久久久中文字幕 | 六月丁香婷婷在线| 2欧美一区二区三区在线观看视频| 久久精品国产亚洲av无码娇色| 欧美v亚洲v综合ⅴ国产v| 欧洲成人综合网| 国产精品一区在线播放| 一区二区高清| 精品人妻一区二区三区视频| 欧美日韩一区二区免费视频| 青青草视频在线观看| 国产精品高清在线| 91亚洲成人| 中文字幕avav| 亚洲一级不卡视频| 亚洲av成人精品一区二区三区在线播放 | 日韩www在线| 日韩精品一区二区三区| 日韩久久不卡| 精品一区二区三区不卡| 免费看一级一片| 精品亚洲aⅴ在线观看| 日本高清不卡一区二区三区视频| 亚洲福利av| 国产乱一区二区| 国产成人亚洲精品自产在线| 亚洲精品影视在线观看| h1515四虎成人| av一区二区三区免费观看| 97久久超碰国产精品| 波多野结衣影片| 久久艳片www.17c.com| 澳门精品久久国产| 国产精品无码人妻一区二区在线| 久久看人人爽人人| 国产原创中文av| 97碰碰碰免费色视频| 成人在线丰满少妇av| 特黄特黄一级片| 一本大道久久a久久综合| 日韩伦理在线电影| 国产精品一区二区三区在线| 日韩中文字幕91| 久久久久亚洲天堂| 一区二区成人av| 99香蕉久久| 最新天堂中文在线| 亚洲国产欧美一区二区三区丁香婷| 国产最新视频在线| 成人av资源| 蜜桃视频第一区免费观看| 国产主播在线播放| 日韩亚洲一区二区| 一道在线中文一区二区三区| 三级黄色片免费观看| 欧洲视频一区二区| 草草视频在线| 黄色网址在线免费看|