av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

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

讓用戶用命令行選項調(diào)整你的 Java 應(yīng)用程序運行方式。

成都創(chuàng)新互聯(lián)公司企業(yè)建站,10年網(wǎng)站建設(shè)經(jīng)驗,專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁設(shè)計,有多年建站和網(wǎng)站代運營經(jīng)驗,設(shè)計師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對于網(wǎng)站制作、網(wǎng)站設(shè)計中不同領(lǐng)域進行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動的思維在網(wǎng)頁中充分展現(xiàn),通過對客戶行業(yè)精準市場調(diào)研,為客戶提供的解決方案。

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

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

安裝 commons-cli

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

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

將庫導(dǎo)入至 Java 代碼

在使用 commons-cli 庫之前,必須首先導(dǎo)入它。對于本次選項解析的簡單示例而言,可以先在 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 中解析選項的準備工作已經(jīng)做好了。

在 Java 中定義布爾選項

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

首先為選項創(chuàng)建一個組,按照慣例命名為 options:

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

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

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

在 Java 中定義帶參選項

有時用戶需要通過選項提供 true 或 false 以外的信息,比如給出配置文件、輸入文件或諸如日期、顏色這樣的設(shè)置項值。這種情況可以使用 builder 方法,根據(jù)選項名簡寫為其創(chuàng)建屬性(例如,-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 函數(shù)可以用來設(shè)置短選項、長選項、是否為必需項(本段代碼中必需項設(shè)置為 true,也就意味著用戶啟動程序時必須提供此選項,否則應(yīng)用程序無法運行)、幫助信息等。

使用 Java 解析選項

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

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

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

 
 
 
  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); 

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

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

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

測試代碼

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

首先,省略必需項 -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 

選項解析

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

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

 
 
 
  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 和選項

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


新聞名稱:使用commons-cli解析Java中的命令行選項
文章路徑:http://uogjgqi.cn/article/djhehgj.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術(shù)咨詢/運營咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流