命令行 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 }
代码运行效果图:
![](https://img2020.cnblogs.com/blog/2281852/202107/2281852-20210728170801666-292502394.png)