命令行 commons.cli.*

完整代码:
 1 import org.apache.commons.cli.*;
 2 
 3 import java.io.ByteArrayOutputStream;
 4 import java.io.PrintWriter;
 5 
 6 /**
 7  * @Author: yc
 8  * @Description: cmd
 9  * @Date: 2021/07/23/14:58
10  */
11 public class Test {
12     private static CommandLine commandLine;
13     private static Options options = new Options();
14     private static String HELP_MSG = null;
15 
16     private static void initTest(String args[]) {
17 
18         CommandLineParser commandLineParser = new DefaultParser();
19 
20         // 添加Option(通俗来讲就是添加可操作符)
21         /*
22          * 常见的Option:
23          * builder("h"):h代表一个参数的简短名称,换成自己需要的
24          * required:是否需要该参数,如果设置为true,则输入命令时需要该参数
25          * hasArg:代表该参数之后是否有参数,true代表输入该参数之后必须有参数,如输入账户,-n cola
26          * argName:该参数的名称
27          * desc:对该参数的描述
28          * longOpt:该参数的全名,在命令行输入时,简短名称和全名都可被识别,即两个名称有相同的意义,如下面的 -n 和 -name,意义相同
29          * type:参数类型
30          * */
31         options.addOption("help", "show help");
32         options.addOption(Option.builder("h").required(false).hasArg(true).argName("localhost").desc("the server of localhost").type(String.class).longOpt("hello").build());
33         options.addOption(Option.builder("s").required(false).hasArg(false).desc("展示").type(String.class).longOpt("show").build());
34         options.addOption(Option.builder("n").required(false).hasArg(true).argName("账户").desc("账户名").type(String.class).longOpt("name").build());
35         options.addOption(Option.builder("p").required(false).hasArg(true).argName("密码").desc("用户密码").type(String.class).longOpt("password").build());
36 
37         try {
38             commandLine = commandLineParser.parse(options, args);
39         } catch (ParseException e) {
40             e.printStackTrace();
41             // 错误时,输入错误信息并将help信息打印出来
42             System.out.println(e.getMessage() + "\n" + getHelpString());
43             System.exit(0);
44         }
45 
46     }
47 
48     // main方法,将项目打成jar包,然后终端运行
49     public static void main(String[] args) {
50         initTest(args);
51         // 判断命令行中是否有-help,如果有,则输出help信息
52         if (commandLine.hasOption("help")) {
53             System.out.println(getHelpString());
54         }
55         // 判断命令行中是否有-s
56         if (commandLine.hasOption("s")) {
57             System.out.println("苹果、香蕉");
58         }
59         // 判断命令行中是否有-n
60         if(commandLine.hasOption("n"))
61         {
62             String username = commandLine.getOptionValue("n");
63             // 判断命令行中是否有-p
64             if(commandLine.hasOption("p"))
65             {
66                 // 判断账户和密码是否等于张三、123
67                 String password = commandLine.getOptionValue("p");
68                 if(username.equals("张三") && password.equals("123"))
69                 {
70                     System.out.println("登录成功!!!");
71                 }
72                 else
73                 {
74                     System.out.println("登录失败!!!");
75                 }
76             }
77         }
78     }
79 
80     /**
81      * help,一般为固定的格式
82      * @return
83      */
84     private static String getHelpString() {
85         if (HELP_MSG == null) {
86             HelpFormatter helpFormatter = new HelpFormatter();
87 
88             ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
89             PrintWriter printWriter = new PrintWriter(byteArrayOutputStream);
90             helpFormatter.printHelp(printWriter, HelpFormatter.DEFAULT_WIDTH, "-help", null,
91                     options, HelpFormatter.DEFAULT_LEFT_PAD, HelpFormatter.DEFAULT_DESC_PAD, null);
92             printWriter.flush();
93             HELP_MSG = new String(byteArrayOutputStream.toByteArray());
94             printWriter.close();
95         }
96         return HELP_MSG;
97     }
98 }


代码运行效果图:

 


 

 
posted @ 2021-07-28 17:01  可楽  阅读(73)  评论(0编辑  收藏  举报