<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    制作命令行程序

    Posted on 2009-12-11 23:22 啥都寫點 閱讀(864) 評論(0)  編輯  收藏 所屬分類: J2SE

    Apache組織的cli項目專門用于解決命令行參數的解析問題。使用cli項目的類庫的關鍵技術點如下:

       •  命令行的每個參數選項都是一個org.apache.commons.cli.Option對象,命令行的所有參數選項的Option對象都放入org.apache.commons.cli.Options中。
       •  類org.apache.commons.cli.CommandLineParser命令行解析器的基類,它的一個具體實現類是org.apache.commons.cli.BasicParser,通過它的parse方法 能將輸入的參數根據命令行參數選項進行解析,得到一個org.apache.commons.cli.CommandLine對象。
       •  CommandLine對象把輸入的命令行參數封裝起來,提供相應的檢測和訪問參數的方法。 

       •  org.apache.commons.cli.HelpFormatter 類用于格式化輸出命令行程序的幫助信息。

    /**-------------------------------BaseConsoleClient-----------------------------------*/
    package book.string.console;

    import org.apache.commons.cli.BasicParser;
    import org.apache.commons.cli.CommandLine;
    import org.apache.commons.cli.CommandLineParser;
    import org.apache.commons.cli.HelpFormatter;
    import org.apache.commons.cli.Option;
    import org.apache.commons.cli.OptionBuilder;
    import org.apache.commons.cli.Options;

    /**
     * 命令行程序的基類,是一個抽象類
     * 采用了Apache組織的命令行解析器的包
     
    */

    public abstract class BaseConsoleClient {
        
    /**幫助選項,參數為-h或者--help,功能描述為Displays help */
        
    private static final Option HELP =
            OptionBuilder.withDescription(
    "Displays help")
            .withLongOpt(
    "help")
            .create(
    "h");
        
    /** debug選項,是否打印調試信息     */
        
    public static final Option DEBUG = new Option("debug""Enables debug mode");

        
    // 命令的參數選項
        private Options options = new Options();
        
    // 命令的幫助信息
        private String usageMsg;
        
    // 命令的頭信息
        private String header;
        
    //是否debug
        private boolean debugMode; 
        
    /**
         * 默認構造函數
         
    */

        
    protected BaseConsoleClient(){
            
    //不打印debug信息
            debugMode = false;
            
    //將幫助和調試選項添加到命令的參數選項中
            options.addOption(HELP);
            options.addOption(DEBUG);
            
    //默認幫助信息是類名
            usageMsg = getClass().getName();
        }

        
        
    /**
         * 增加一個命令的參數選項
         * 
    @param option
         
    */

        
    protected void addOption(Option option){
            
    this.options.addOption(option);
        }

        
        
    protected void setUsageMsg(String msg){
            
    this.usageMsg = msg;
        }

        
        
    protected void setHeader(String header){
            
    this.header = header;
        }

        
        
    /**
         * 顯示幫助信息
         
    */

        
    public void displayUsage(){
            HelpFormatter formatter 
    = new HelpFormatter();
            String header 
    = (this.header == null?
                    
    "Options:" : this.header;
            formatter.printHelp(usageMsg, header, options, 
    nullfalse);
        }

        
        
    /**
         * 解析命令行參數
         * 
    @param args
         * 
    @return
         * 
    @throws Exception
         
    */

        
    public CommandLine parse(String[] args) throws Exception{
            
    //新建一個命令行解析器
            CommandLineParser parser = new BasicParser();
            
    //用解析器解析命令行參數
            CommandLine line = parser.parse(options, args);
            
    //如果命令行中有-h,則打印幫助信息,并退出
            if (line.hasOption("h")){
                displayUsage();
                System.exit(
    0);
            }
          
            
    if (line.hasOption("debug")){
                
    this.debugMode = true;
            }

            
    return line;        
        }

        
        
    public boolean isDebugMode(){
            
    return this.debugMode;    
        }

    }


    /**-------------------------------------SayHello.java----------------------------------------------*/

    package book.string.console;

    import org.apache.commons.cli.CommandLine;
    import org.apache.commons.cli.Option;
    import org.apache.commons.cli.OptionBuilder;

    public class SayHello extends BaseConsoleClient {

        
    private static final String SAYHELLO_COMMAND = "SayHello";
        
    private static final String SAYHELLO_USAGE = SAYHELLO_COMMAND;

        
    private static final Option NAME =
            OptionBuilder.withDescription(
    "The name of the person. This argument is required.").hasArg()
            .withLongOpt(
    "name")
            .create(
    "n");    
          
        
    public static void main(String[] args){
            
            String name 
    = null;
            
            SayHello client 
    = new SayHello();
            client.addOption(NAME);

            client.setUsageMsg(SAYHELLO_USAGE);
            client.setHeader(
    "Options:");
            
            
    try {
                CommandLine line 
    = client.parse(args);
                
    if (line.hasOption("n")){
                    name 
    = line.getOptionValue("n");
                }
     else {
                    System.err.println(
    "Error: missing -n arguments.");
                    System.err.println(
    "Try '" + SAYHELLO_COMMAND 
                            
    + " -h' for more information.");
                    System.exit(
    1);
                }

               
            }
     catch (Exception e){
                
    if (client.isDebugMode()){
                    e.printStackTrace();
                }
     else {
                    System.err.println(
    "Error: " + e.getMessage());
                }

                System.exit(
    1);
            }

            System.out.println(
    "Hello, " + name + "!");
        }

    }







                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 成人奭片免费观看| va亚洲va日韩不卡在线观看| 久久久久亚洲av无码专区喷水| 国产麻豆视频免费观看| 国产亚洲精品美女2020久久| 亚洲一区二区三区自拍公司| 18国产精品白浆在线观看免费 | 国产香蕉九九久久精品免费| 国产精品亚洲综合网站| 亚洲AV无码第一区二区三区| 最近中文字幕免费mv视频8| 免费夜色污私人影院网站| 久久精品国产亚洲香蕉| 午夜毛片不卡免费观看视频| 成人免费无码H在线观看不卡| 亚洲国产情侣一区二区三区| 亚洲人成无码网站久久99热国产| 最近最新高清免费中文字幕| 免费的黄色网页在线免费观看| 亚洲AV无码成人精品区蜜桃 | 国产国拍亚洲精品mv在线观看| 欧美在线看片A免费观看| 福利免费在线观看| 亚洲色偷偷色噜噜狠狠99| 亚洲av无码一区二区三区乱子伦 | 久久精品亚洲男人的天堂| 四虎国产精品免费久久| 免费a级毛片无码a∨免费软件| 亚洲人成网亚洲欧洲无码| 午夜亚洲国产理论秋霞| 免费一级一片一毛片| 四虎国产精品免费久久| 香港a毛片免费观看| 特级毛片aaaa免费观看| 亚洲人成综合网站7777香蕉| 亚洲bt加勒比一区二区| 亚洲一区二区精品视频| 国产嫩草影院精品免费网址| 三年片在线观看免费大全| 美丽姑娘免费观看在线观看中文版| 成人久久久观看免费毛片|