亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > Apache > 正文

使用Apache commons-cli包進行命令行參數解析的示例代碼

2024-08-27 18:30:55
字體:
來源:轉載
供稿:網友

Apache的commons-cli包是專門用于解析命令行參數格式的包。

 依賴:

<dependency>  <groupId>commons-cli</groupId>  <artifactId>commons-cli</artifactId>  <version>1.3.1</version></dependency>

使用此包需要:

1.先定義有哪些參數需要解析、哪些參數有額外的選項、每個參數的描述等等,對應Options類
 比如說一個命令行參數是 -hfbv,我們定義的Options的目的是,說明哪些參數是真正需要解析的參數:如我們定義了Option:h、f、b,那么在解析的時候解析器就可以知道怎么去用定義的Option匹配命令行從而獲取每個參數。而且可以定義哪些參數需要選項,如tar -f ,f參數就需要文件名選項,通過定義解析器才可以把f后面的內容解析為f指定的文件名。

2.根據定義的需要解析的參數對命令行參數進行解析,對應CommandLineParser類
 根據定義的Options對象去解析傳入的String[] argus參數,從而匹配出每個參數,然后我們就可以單獨獲取每個參數。

3.解析完成返回CommandLine對象,由這個對象可獲取此次命令行參數的信息。
 可以從這個對象中知道哪些參數輸入了,哪些參數沒有輸入,哪些參數的額外選項的內容等等。然后我們就能自己寫代碼根據不同參數執行不同邏輯了。

示例代碼:

import java.io.File;import java.io.IOException;import java.util.ArrayList;import java.util.Arrays;import java.util.HashSet;?import org.apache.commons.cli.CommandLine;import org.apache.commons.cli.CommandLineParser;import org.apache.commons.cli.DefaultParser;import org.apache.commons.cli.HelpFormatter;import org.apache.commons.cli.Option;import org.apache.commons.cli.Options;import org.apache.commons.cli.ParseException;?import com.lwt.util.DirUtil;?public class CommandLineUtil {  private String[] args;  private Options opts = new Options();  private File keyFile;  private boolean encrypt;  private boolean create;  private boolean enName;  private File[] files;  private File[] dirs;  public File getKeyFile() {    return keyFile;  }  public boolean isEncrypt() {    return encrypt;  }  public boolean isEnName() {    return enName;  }  public boolean isCreate() {    return create;  }  public File[] getFiles() {    return files;  }  public File[] getDirs() {    return dirs;  }?  public CommandLineUtil(String[] args) {    this.args = args;    definedOptions();    parseOptions();    duplicate_removal();  }  // 定義命令行參數  private void definedOptions(){    Option opt_h = new Option("h", "Show this page.");    Option opt_e = new Option("e", "encrypt", false, "Encrypt file.");    Option opt_d = new Option("d", "decrypt", false, "Decrypt file.");    Option opt_c = new Option("c", "create", false, "Create new key file.");    Option opt_n = new Option("n", "name", false, "Encrypt file name.");    Option opt_k = Option.builder("k").hasArg().argName("keyFile")        .desc("Specify the key file").build();    Option opt_f = Option.builder("f").hasArgs().argName("file1,file2...")        .valueSeparator(',')        .desc("A files list with ',' separate to handle").build();    Option opt_r = Option        .builder("r")        .hasArgs()        .argName("dir1,dir1...")        .valueSeparator(',')        .desc("A directories list with ',' separate to handle its child files")        .build();    Option opt_R = Option        .builder("R")        .hasArgs()        .argName("dir1,dir1...")        .valueSeparator(',')        .desc("A directories list with ',' separate to recurse handle child files")        .build();    opts.addOption(opt_n);    opts.addOption(opt_c);    opts.addOption(opt_k);    opts.addOption(opt_h);    opts.addOption(opt_e);    opts.addOption(opt_d);    opts.addOption(opt_f);    opts.addOption(opt_r);    opts.addOption(opt_R);  }  // 解析處理命令行參數  private void parseOptions(){    CommandLineParser parser = new DefaultParser();    CommandLine line = null;    // 解析命令行參數    try {      line = parser.parse(opts, args);    } catch (ParseException e) {      System.err.println(e.getMessage());      System.exit(1);    }?    // 若指定h則顯示幫助    if (args == null || args.length == 0 || line.hasOption("h")) {      HelpFormatter help = new HelpFormatter();      help.printHelp("encrypt", opts);    }?    // 選擇加密或解密操作,默認是加密文件    if (line.hasOption("d")) {      if (line.hasOption("e")) {        System.err            .println("The -e and -d option can't specify at the same time.");        System.exit(1);      }      encrypt = false;    } else {      encrypt = true;      if(line.hasOption("n")){        enName = true;      }    }    if (line.hasOption("k")) {      String k = line.getOptionValue("k");      File file = new File(k);      if (line.hasOption("c")) {        keyFile = file;        create = true;      }else {        if(file.isFile()){          keyFile = file;        } else{          System.err.println(file + " is not a available key file");          System.exit(1);        }      }    }?    ArrayList<File> files = new ArrayList<File>();    ArrayList<File> dirs = new ArrayList<File>();    if (line.hasOption("f")) {      String[] fs = line.getOptionValues("f");      for(String f : fs){        File file = new File(f);        if(file.isFile()){          files.add(file);        }else{          System.err.println(file + " is not a file");          System.exit(1);        }      }    }?    if (line.hasOption("r")) {      String[] rs = line.getOptionValues("r");      for(String r : rs){        File dir = new File(r);        if(dir.isDirectory()){          dirs.add(dir);          DirUtil dirUtil = new DirUtil(dir);          files.addAll(Arrays.asList(dirUtil.getFiles()));          dirs.addAll(Arrays.asList(dirUtil.getDirs()));        }else{          System.err.println(dir + " is not a directory");          System.exit(1);        }      }    }?    if (line.hasOption("R")) {      String[] Rs = line.getOptionValues("R");      for(String R : Rs){        File dir = new File(R);        if(dir.isDirectory()){          dirs.add(dir);          DirUtil dirUtil = new DirUtil(dir);          files.addAll(Arrays.asList(dirUtil.getAllFiles()));          dirs.addAll(Arrays.asList(dirUtil.getAllDirs()));        }else{          System.err.println(dir + " is not a directory");          System.exit(1);        }      }    }    this.files = files.toArray(new File[0]);    this.dirs = dirs.toArray(new File[0]);  }  public void duplicate_removal (){    HashSet<File> fileSet = new HashSet<File>();    for(File file : files){      try {        fileSet.add(file.getCanonicalFile());      } catch (IOException e) {        System.err.println(e.getMessage());        System.exit(1);      }    }    files = fileSet.toArray(new File[0]);    fileSet = new HashSet<File>();    for(File dir : dirs){      try {        fileSet.add(dir.getCanonicalFile());      } catch (IOException e) {        System.err.println(e.getMessage());        System.exit(1);      }    }    dirs = fileSet.toArray(new File[0]);  }}

總結

以上所述是小編給大家介紹的使用Apache commons-cli包進行命令行參數解析的示例代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到服務器教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级片免费在线| 成人中文字幕在线观看| 欧洲成人在线视频| 性欧美xxxx| 国产精品青草久久久久福利99| 尤物精品国产第一福利三区| 欧美成人网在线| 日韩精品免费观看| 欧美中文在线免费| www.国产一区| 日韩电影免费观看在线观看| 国产亚洲精品久久久| 欧美午夜丰满在线18影院| 欧美性做爰毛片| 亚洲日韩欧美视频| 久久99久久亚洲国产| 国产精品久久在线观看| 97国产精品视频人人做人人爱| 久久夜色精品国产| 亚洲高清在线观看| 欧美风情在线观看| 国产精品久久久久久久久久久久久久| 亚洲第一av网站| 色老头一区二区三区在线观看| 国产精品自产拍在线观| 精品成人在线视频| 91天堂在线观看| 国产成人精品一区二区在线| 亚洲天堂免费在线| 亚洲成人xxx| 毛片精品免费在线观看| 日韩欧美在线观看| 成人黄色av播放免费| 欧美夫妻性视频| 一本色道久久88综合日韩精品| 国产精品永久在线| 欧美激情中文字幕在线| 亚洲人成在线观看网站高清| 亚洲欧美日韩在线高清直播| 国产精品69久久| 日韩av成人在线| 日韩国产中文字幕| 日韩av在线网页| 亚洲精品大尺度| 亚洲成色www8888| 亚州欧美日韩中文视频| 久久久国产精品亚洲一区| 中文欧美日本在线资源| 有码中文亚洲精品| 欧美性少妇18aaaa视频| 精品国产乱码久久久久久天美| 日韩欧美在线字幕| 国产盗摄xxxx视频xxx69| 国产高清视频一区三区| 中文字幕亚洲欧美日韩2019| 亚洲第一中文字幕| 亚洲欧美另类国产| 亚洲精品视频免费在线观看| 国语自产偷拍精品视频偷| 综合久久五月天| 欧美日韩国产二区| 久久av中文字幕| 538国产精品一区二区免费视频| 97**国产露脸精品国产| 国产盗摄xxxx视频xxx69| 亚洲精品视频久久| 黑人狂躁日本妞一区二区三区| 91免费欧美精品| 亚洲国产精品美女| 欧美一区二区三区……| 亚洲国产精品人久久电影| 国产精品视频白浆免费视频| 亚洲精品国产精品国自产观看浪潮| 日韩一区二区av| 国产经典一区二区| 国产精品三级网站| 91精品视频播放| 亚洲免费视频网站| 成人免费午夜电影| 亚洲国产精品久久91精品| 国产午夜精品免费一区二区三区| 欧美理论电影在线观看| 91系列在线播放| 欧美极品少妇xxxxx| 日韩欧美国产中文字幕| 91精品国产91久久久久福利| 国外视频精品毛片| 国产成人精品久久二区二区| 亚洲美女性生活视频| 亚洲国产高清高潮精品美女| 中文字幕亚洲欧美日韩2019| 国产精品你懂得| 九九热精品在线| 国产精品三级美女白浆呻吟| 国产精品久久久久免费a∨| 久久久人成影片一区二区三区| 欧美激情手机在线视频| 欧美精品一区二区三区国产精品| 日本精品在线视频| 亚洲免费一级电影| 97人人模人人爽人人喊中文字| 国产日韩一区在线| 亚洲激情视频在线播放| 国产97在线|日韩| 亚洲成色777777在线观看影院| 久久久中文字幕| 亚洲国产91精品在线观看| 欧美性猛交xxxx免费看漫画| 欧美亚洲国产视频| 欧美日韩一区二区三区在线免费观看| 成人欧美一区二区三区黑人孕妇| 欧美日韩国产色| 国产日韩精品在线播放| 久久免费少妇高潮久久精品99| 国产精品久久91| 欧美理论电影在线观看| 国产亚洲欧洲在线| 亚洲精品乱码久久久久久按摩观| 精品国产999| 国产成人综合精品| 精品视频在线观看日韩| 欧美夫妻性生活xx| 懂色aⅴ精品一区二区三区蜜月| 国产成人精彩在线视频九色| 欧美成人第一页| 91丨九色丨国产在线| 日韩美女福利视频| 91久久国产婷婷一区二区| 国产成人久久精品| 亚洲精品二三区| 亚洲国产精品网站| 欧美午夜影院在线视频| 欧美成人亚洲成人| 亚洲美女av黄| 欧美午夜精品久久久久久浪潮| 国产精品香蕉在线观看| 国产九九精品视频| 日韩av在线影视| 国产精品人人做人人爽| 久久精品99国产精品酒店日本| 国内精品模特av私拍在线观看| 欧美午夜影院在线视频| 精品亚洲国产成av人片传媒| 亚洲欧美国产精品久久久久久久| 国内久久久精品| 亚洲另类图片色| 亚洲国产精品99| 国外成人在线直播| 欧美性20hd另类| 成人国产精品一区| 国产欧美久久一区二区| 国产精品老女人视频| 91精品国产色综合久久不卡98| 国语自产在线不卡| 国产精品福利久久久| 88xx成人精品| 另类天堂视频在线观看| 欧美成人免费播放| 丝袜情趣国产精品| 日韩在线精品视频| 久久久久国产一区二区三区| 亚洲欧美日韩区| 国产精品爽爽爽| 91色视频在线观看|