`
rensanning
  • 浏览: 3548669 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:38147
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:607312
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:682336
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:89355
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:401851
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69694
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:91723
社区版块
存档分类
最新评论

Java命令行选项解析之Commons-CLI & Args4J & JCommander

    博客分类:
  • Java
 
阅读更多
熟悉Linux命令的都知道几乎所有程序都会提供一些命令行选项。而命令行选项有两种风格:以“-”开头的单个字符的POSIX风格;以“--”后接选项关键字的GNU风格。

假定我们的程序需要以下选项:
引用
Options:
  -t,--text use given information(String)
  -b display current time(boolean)
  -s,--size use given size(Integer)
  -f,--file use given file(File)
  -D <property=value> use value for given property(property=value)


(1)Apache的Commons-CLI
版本:commons-cli-1.2.jar

支持三种CLI选项解析:
  • BasicParser:直接返回参数数组值
  • PosixParser:解析参数及值(-s10)
  • GnuParser:解析参数及值(--size=10)
对于动态参数:
-Dkey=value

需要代码设置参数,返回类型需要转换。
args = new String[]{"-t", "rensanning", "-f", "c:/aa.txt", "-b", "-s10", "-Dkey1=value1", "-Dkey2=value2" };

try {
	// create Options object
	Options options = new Options();
	options.addOption(new Option("t", "text", true, "use given information(String)"));
	options.addOption(new Option("b", false, "display current time(boolean)"));
	options.addOption(new Option("s", "size", true, "use given size(Integer)"));
	options.addOption(new Option("f", "file", true, "use given file(File)"));

	@SuppressWarnings("static-access")
	Option property = OptionBuilder.withArgName("property=value")
			.hasArgs(2)
			.withValueSeparator()
			.withDescription("use value for given property(property=value)")
			.create("D");
	property.setRequired(true);
	options.addOption(property);

	// print usage
	HelpFormatter formatter = new HelpFormatter();
	formatter.printHelp( "AntOptsCommonsCLI", options );
	System.out.println();

	// create the command line parser
	CommandLineParser parser = new PosixParser();
	CommandLine cmd = parser.parse(options, args);

	// check the options have been set correctly
	System.out.println(cmd.getOptionValue("t"));
	System.out.println(cmd.getOptionValue("f"));
	if (cmd.hasOption("b")) {
		System.out.println(new Date());
	}
	System.out.println(cmd.getOptionValue( "s" ));
	System.out.println(cmd.getOptionProperties("D").getProperty("key1") );
	System.out.println(cmd.getOptionProperties("D").getProperty("key2") );
	
} catch (Exception ex) {
	System.out.println( "Unexpected exception:" + ex.getMessage() );
}


(2)Args4J
版本:args4j-2.0.29.jar

基于注解。
args = new String[] {"-t", "rensanning", "-f", "c:/aa.txt", "-b", "-s", "10", "-D", "key1=value1" , "-D", "key2=value2"};

try {
	Args4jOptions options = new Args4jOptions();
	CmdLineParser parser = new CmdLineParser(options);

	// print usage
	parser.printUsage(System.out);
	System.out.println();

	parser.parseArgument(args);
	
	// check the options have been set correctly
	System.out.println(options.getText());	
	System.out.println(options.getFile().getName());		
	if(options.isBol()) {
		System.out.println(new Date());
	}			
	System.out.println(options.getSize());
	System.out.println(options.getProperties().get("key1"));
	System.out.println(options.getProperties().get("key2"));

} catch (Exception ex) {
	System.out.println("Unexpected exception:" + ex.getMessage());
}

@Option(name = "-t", aliases = "-text", usage = "use given information(String)")
private String text;
@Option(name = "-b", usage = "display current time(boolean)")
private boolean bol = false;
@Option(name = "-s", aliases = "-size", usage = "use given size(Integer)")
private int size = 0;
@Option(name = "-f", aliases = { "-file" }, metaVar = "<file>", usage = "use given file(File)")
private File file;

private Map<String, String> properties = new HashMap<String, String>();
@Option(name = "-D", metaVar = "<property>=<value>", usage = "use value for given property(property=value)")
public void setProperty(final String property) {
	String[] arr = property.split("=");
	properties.put(arr[0], arr[1]);
}


(3)JCommander
版本:jcommander-1.45.jar

基于注解、TestNG作者开发。
args = new String[] {"-t", "rensanning", "-f", "c:/aa.txt", "-b", "-s", "10", "-D", "key1=value1" , "-D", "key2=value2"};

try {
	JCmdrOptions options = new JCmdrOptions();
	JCommander jcmdr = new JCommander(options, args);

	// print usage
	jcmdr.setProgramName("AntOptsCommonsCLI");
	jcmdr.usage();

	// check the options have been set correctly
	System.out.println(options.getText());	
	System.out.println(options.getFile().getName());		
	if(options.isBol()) {
		System.out.println(new Date());
	}			
	System.out.println(options.getSize());
	System.out.println(options.getDynamicParams().get("key1"));
	System.out.println(options.getDynamicParams().get("key2"));

} catch (Exception ex) {
	System.out.println("Unexpected exception:" + ex.getMessage());
}

@Parameter(names = { "-t", "-text" }, description = "use given information(String)")
private String text;
@Parameter(names = { "-b" }, description = "display current time(boolean)")
private boolean bol = false;
@Parameter(names = { "-s", "-size" }, description = "use given size(Integer)")
private int size = 0;
@Parameter(names = { "-f", "-file" }, description = "use given file(File)")
private File file;
@DynamicParameter(names = "-D", description = "use value for given property(property=value)")
public Map<String, String> dynamicParams = new HashMap<String, String>();

分享到:
评论

相关推荐

    commons-cli-1.3.1-API文档-中文版.zip

    标签:commons、cli、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    最新commons-cli,解析命令行参数

    Commons CLI 是一个 Java 库,专门用于处理命令行参数。在软件开发中,尤其是在命令行界面(CLI)应用中,解析命令行参数是一项常见的任务。它允许开发者定义可接受的命令行选项,以及如何处理这些选项。这个最新的...

    spring-framework & commons-logging

    spring-framework & commons-logging spring-framework & commons-logging spring-framework & commons-logging spring-framework & commons-logging spring-framework & commons-logging spring-framework & ...

    commons-cli-1.2-API文档-中英对照版.zip

    标签:cli、commons、jar包、java、API文档、中英对照版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...

    commons-cli-1.4.jar

    commons-cli-1.4.jar,commons-configuration-1.0.jar,commons-lang-2.3.jar,commons-logging-1.1.1.jar

    commons-cli-1.2-API文档-中文版.zip

    标签:cli、commons、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    commons-cli-1.2.jar

    commons-cli-1.2.jar

    ALevin环境配置所需的jar包——commons-cli-1,5,0

    ALevin环境配置所需的jar包——commons-cli-1,5,0 适合人群: 对虚拟网络嵌入算法感兴趣的人 能学到什么: 可以帮你快速的将ALevin基础运行环境配置好,为你节省时间进行进一步的学习 阅读建议: 由于ALevin的配置...

    commons-cli-1.2.1.jar

    这是微信企业账户转账必用的一个JAR包,用户企业账户号给指定openid转账,通过微信直接转账到openid用户的零钱包中

    commons-cli-1.3-API文档-中文版.zip

    标签:cli、commons、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心...

    commons-cli-1.0.jar

    它简化了CLI的定义、解析和交互过程,使得开发者能够专注于实现核心业务逻辑,而不是处理命令行解析的细节。"commons-cli-1.0.jar"文件包含了所有必要的类和方法,可以直接引入到Java项目中使用,以提升命令行驱动...

    commons-cli-1.2-bin.zip

    Commons CLI 是 Apache Software Foundation 的一个开源项目,全称为“Command Line Interface”,中文可译为“命令行接口”。这个工具包的主要目标是简化Java程序中处理命令行参数的过程,为开发者提供了一个灵活且...

    commons-cli-1.5.0.jar

    commons-cli-1.5.0.jar

    commons-cli-1.3.1-API文档-中英对照版.zip

    标签:commons、cli、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用...

    commons-cli jar包

    commons-cli包,进行命令行参数解析的工具类,java工具类。可以直接引用到项目中,简单又方便。

    commons-dbcp-1.4&&commons-pool-1.3.jar

    标题中的"commons-dbcp-1.4&&commons-pool-1.3.jar"指的是Apache Commons的两个重要组件:DBCP(Database Connection Pool)1.4版本和Pool 1.3版本。这两个组件在Java Web开发中扮演着关键角色,尤其在数据库连接...

    commons-cli-1.3.1-bin

    Commons CLI 是一个 Java 库,专门用于处理命令行接口(CLI)选项和参数。这个库在标题中被标记为 "commons-cli-1.3.1-bin",表明这是 Commons CLI 的一个二进制版本,版本号为 1.3.1。在软件开发中,特别是 Java ...

    commons-beanutils-1.9.1.jar<---&gt;commons-logging-1.1.3.jar

    这意味着开发者可以使用一个统一的API,然后在部署时选择具体的日志框架,如Log4j、java.util.logging或Apache Commons Logging自己实现的简单日志系统。`commons-logging`库提供了类`org.apache.commons.logging....

    commons-pool&commons;-dbcp

    在SSH框架中,Spring通常负责集成数据库连接池,而Commons DBCP就是Spring推荐的连接池实现之一。通过配置Spring的DataSource,开发者可以利用DBCP来管理数据库连接,实现数据库操作的高效性和稳定性。此外,"sql ...

Global site tag (gtag.js) - Google Analytics