利用Apache的CLI来处理命令行
CLI是Jakarta Commons中的一个子类。如果你仅仅只有一到两个参数需要处理,那么使用它有点多余,但是,如果你需要从命令行中捕获大多数应用程序的设置参数,那么使用CLI是恰到好处的。
在使用CLI之前需要创建一个Options对象,该对象相当于一个容器,另外还有Option对象,每个Option对象相对于命令行中的一个参数。
?? Options opts = new Options();
通过利用这个Options,你可以使用addOption()方法定义你的应用程序可接受的命令行参数,每次都为一个option调用一次这个方法,看下面例示:
?? opts.addOption("h", false, "Print help for this application");
???opts.addOption("u", true, "The username to use");
???opts.addOption("dsn", true, "The data source to use");
当然你也可以单独创建Option对线,然后使用addOption()方法添加进去。如下:
Option op = new Option("h", false, "Print help for this application");
一旦你定义了类的参数,创建一个CommandLineParser,并分析已传送到主方法中的组。
package com.founder.common;
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
public class OptionsTip {
?public static void main(String[] args) {
??try {
???Options opts = new Options();
???opts.addOption("h", false, "Print help for this application");
???opts.addOption("u", true, "The username to use");
???opts.addOption("dsn", true, "The data source to use");
???BasicParser parser = new BasicParser();
???CommandLine cl = parser.parse(opts, args);
???
???if (cl.hasOption('h')) {
????HelpFormatter hf = new HelpFormatter();
????hf.printHelp("OptionsTip", opts);
???} else {
????System.out.println(cl.getOptionValue("u"));
????System.out.println(cl.getOptionValue("dsn"));
???}
??} catch (ParseException pe) {
???pe.printStackTrace();
??}
?}
}
注:使用此程序时候别忘了把commons-cli-1.0.jar加入到你的classpath中
运行结果:
E:\javaworkspace\collection\src>java com.founder.common.OptionsTip -h
usage: OptionsTip
?-dsn??? The data source to use
?-h????? Print help for this application
?-u????? The username to use
E:\javaworkspace\collection\src>java com.founder.common.OptionsTip -u eric -dsn founder
eric
founder