Commons CLI 教程

Commons CLI 使用布尔选项

该示例将通过第一个布尔类型的参数来控制示例输出日期(如:2022-10-01)或者日期时间(2022-10-01 12:00:00)。

在 Apache Commons CLI 中,一个布尔选项在命令行中通过是否存在这个选项来进行表示。如果选项中存在该选项,则选项值为 true。如果选项中不存在该选项,则该选项的值为 false。

创建 Options

Commons CLI  在创建命令行解析时,必须创建一个 Options 对象,并且必须将程序支持的所有选项添加到该 Options 对象中。简单来说,在解析命令行之前,我们需要事先约定该程序支持哪些选项。

创建 Options 如下:

// 创建 Options 对象
Options options = new Options();

// 添加 t 选项
options.addOption("t", false, "display current time");

说明:addOption() 方法有三个参数:

(1)第一个参数表示选项的字符串。

(2)第二个参数是一个布尔值,它指定该选项是否需要一个参数。在布尔选项(有时被称为标志)的情况下,参数值不会出现,因此会传递 false。

(3)第三个参数是选项的描述,该描述将在应用程序的使用帮助中显示。

解析命令行参数

前面介绍了选项定义,在 Commons CLI   中通过 CommandLineParser 类的 parse() 方法来解析命令行参数。CommandLineParser 接口有几个实现,分别为 BasicParser、 DefaultParser、GnuParser、Parser、PosixParser,推荐使用 DefaultParser 实现。

解析命令行参数如下:

// 创建一个解析器
CommandLineParser parser = new DefaultParser();

// options 为选项
// args 为命令行参数
CommandLine cmd = parser.parse( options, args);

成功解析命令行参数后,我们需要做的是检查 t 选项是否存在。要做到这一点,我们将查询 CommandLine 对象。CommandLine 的 hasOption() 方法接收字符串参数。如果字符串选项存在,返回 true。如果字符串不存在,否则它返回 false。例如:

// 检查选项 t 是否存在
if (cmd.hasOption("t")) {
   // 打印日期和时间
} else {
   // 打印日期
}

完整示例

该示例默认输出当前日期,如果运行时携带了 -t 参数,则输出日期和时间。

代码如下:

package com.hxstrive.cli;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Option;
import org.apache.commons.cli.Options;

import java.text.SimpleDateFormat;
import java.util.Date;

/**
* 默认输出当前日期,如果携带 -t 参数则同时输出时间
*
* @author Administrator
*/
public class Demo1 {
   /** 我十一行注释 */
   private static final SimpleDateFormat
           DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd");
   // 我是一行注释
   private static final SimpleDateFormat
           DATETIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

   /**
    * 程序入口方法
    * @param args 程序选项参数
    * @throws Exception
    */
   public static void main(String[] args) throws Exception {
       // 定义程序选项
       Options options = new Options();
       options.addOption(new Option("t", false, "显示时间"));

       // 解析程序选项参数
       CommandLineParser lineParser = new DefaultParser();
       CommandLine commandLine = lineParser.parse(options, args);

       // 判断程序是否指定了 -t 选项参数
       if(commandLine.hasOption("t")) {
           System.out.println(DATETIME_FORMAT.format(new Date()));
       } else {
           System.out.println(DATE_FORMAT.format(new Date()));
       }
   }

}

不带参数的方式运行程序,输出如下:

$ java Demo1
2023-06-26

带 -t 参数运行程序,输出如下:

$ java Demo1 -t
2023-06-26 10:46:19
说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号