commons-cli使用介绍

commons-cli是Apache开源组织提供的用于解析命令行参数的包,命令行的处理共分为三个阶段:定义阶段、解析阶段和审讯阶段。

在定义阶段,我们需要使用Options类来定义我们需要使用的命令。

方法摘要:

返回值方法名说明
OptionsaddOption(Option opt)添加一个选项实例
OptionsaddOption(String opt, boolean hasArg, String description)添加一个只包含短名称的选项
OptionsaddOption(String opt, String description)添加一个只包含短名称的选项
OptionsaddOption(String opt, String longOpt, boolean hasArg, String description)添加一个包含短名称和长名称的选项
OptionsaddOptionGroup(OptionGroup group)添加一个选项组
List<String>getMatchingOptions(String opt)获得匹配选项的长名称集合
OptiongetOption(String opt)通过长名称或短名称获得选项
OptionGroupgetOptionGroup(Option opt)获得选项所在的选项组
CollectiongetOptions()获得一个只读的选项集合
ListgetRequiredOptions()获得必须的选项集合
booleanhasLongOption(String opt)判断是否存在选项
booleanhasOption(String opt)判断是否存在选项
booleanhasShortOption(String opt)判断是否存在选项

在解析阶段,我们需要使用DefaultParser来解析命令行参数。DefaultParser实现了CommandLineParser接口,解析命令行参数完成后会返回CommandLine对象,在审讯阶段,我们就需要CommandLine对象来完成我们实际的工作。

部分方法摘要:

返回值方法名说明
ListgetArgList()获得参数集合
String[]getArgs()获得参数数组
Option[]getOptions()获得选项数组
StringgetOptionValue(char opt)获得选项值
StringgetOptionValue(char opt, String defaultValue)获得选项值
StringgetOptionValue(String opt)获得选项值
StringgetOptionValue(String opt, String defaultValue)获得选项值
booleanhasOption(char opt)判断是否含有选项
booleanhasOption(String opt)判断是否含有选项

下面我们通过一段示例来完成列出指定目录下所有文件信息的功能。
示例代码:

package com.gujin.cli;

import java.io.File;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
import org.junit.Test;

public class CLITest
{
   @Test
   public void test() throws ParseException
   {
      // 模拟命令行参数
      String[] args = { "-dir", ".", "-t" };
      testParser(args);
   }

   public void testParser(String[] args) throws ParseException
   {
      Options options = new Options();
      options.addOption("dir", true, "root folder path.");
      options.addOption("t", false, "file last modify time.");

      CommandLineParser parser = new DefaultParser();
      CommandLine cmd = parser.parse(options, args);
      if (cmd.hasOption("dir"))
      {
         File dir = new File(cmd.getOptionValue("dir"));
         if (dir.exists())
         {
            if (cmd.hasOption("t"))
            {
               File[] files = dir.listFiles();
               if (files != null)
               {
                  for (File file : files)
                  {
                     System.out.println(file.getName() + " "
                           + file.lastModified());
                  }
               }
            }
            else
            {
               String[] files = dir.list();
               if (files != null)
               {
                  for (String file : files)
                  {
                     System.out.println(file);
                  }
               }
            }
         }
         else
         {
            System.out.println(dir.getAbsolutePath() + " not exists.");
         }
      }
      else
      {
         System.out.println("not has dir option.");
      }
   }
}

运行结果:

.classpath 1460357174453
.project 1459855420531
.settings 1459855435609
bin 1460357176515
file 1460184797968
lib 1460357165859
md 1460511999796
src 1460094266062
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值