<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 + "!");
        }

    }







                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 激情97综合亚洲色婷婷五| 成视频年人黄网站免费视频| 国产免费人成在线视频| 亚洲精品福利你懂| 国产成人免费午夜在线观看| 亚洲美女视频网址| 日韩人妻无码精品久久免费一| 亚洲va国产va天堂va久久| 中文字幕乱码一区二区免费| 亚洲av色福利天堂| 四虎免费影院ww4164h| 亚洲人成免费电影| 最近免费中文字幕4| 亚洲av综合日韩| 久久精品亚洲男人的天堂| 在线看片免费人成视频久网下载| 亚洲一区二区三区无码中文字幕| 可以免费观看的国产视频| 亚洲高清美女一区二区三区| 99久久国产热无码精品免费| 亚洲精品无码av中文字幕| 国产真实伦在线视频免费观看| 4hu四虎免费影院www| 亚洲乱码无码永久不卡在线| 99久久99久久精品免费观看| 国产成人精品日本亚洲专区6| 在线免费观看毛片网站| 无遮挡免费一区二区三区| 亚洲av午夜福利精品一区人妖| h视频在线观看免费网站| 亚洲砖码砖专无区2023| mm1313亚洲精品无码又大又粗| 国内精品一级毛片免费看| 亚洲美女激情视频| 国产一区二区三区在线观看免费 | 亚洲欧洲国产精品香蕉网| 久久精品无码精品免费专区| 中文有码亚洲制服av片| 国产精品亚洲不卡一区二区三区| 中文字幕在线免费观看| 亚洲欧美在线x视频|