完整代码:
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 }
代码运行效果图:
![]()