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