commons-cli使用介绍

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

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

方法摘要:

返回值 方法名 说明
Options addOption(Option opt) 添加一个选项实例
Options addOption(String opt, boolean hasArg, String description) 添加一个只包含短名称的选项
Options addOption(String opt, String description) 添加一个只包含短名称的选项
Options addOption(String opt, String longOpt, boolean hasArg, String description) 添加一个包含短名称和长名称的选项
Options addOptionGroup(OptionGroup group) 添加一个选项组
List<String> getMatchingOptions(String opt) 获得匹配选项的长名称集合
Option getOption(String opt) 通过长名称或短名称获得选项
OptionGroup getOptionGroup(Option opt) 获得选项所在的选项组
Collection getOptions() 获得一个只读的选项集合
List getRequiredOptions() 获得必须的选项集合
boolean hasLongOption(String opt) 判断是否存在选项
boolean hasOption(String opt) 判断是否存在选项
boolean hasShortOption(String opt) 判断是否存在选项

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

部分方法摘要:

返回值 方法名 说明
List getArgList() 获得参数集合
String[] getArgs() 获得参数数组
Option[] getOptions() 获得选项数组
String getOptionValue(char opt) 获得选项值
String getOptionValue(char opt, String defaultValue) 获得选项值
String getOptionValue(String opt) 获得选项值
String getOptionValue(String opt, String defaultValue) 获得选项值
boolean hasOption(char opt) 判断是否含有选项
boolean hasOption(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

你可能感兴趣的:(apache,cli,commons,命令行参数)