编写解析命令行参数的代码并不是一件让人兴奋的工作,但是即使在应用容器和Web服务的年代,有时候这也是必要的。在你下次需要分析命令行参数而程序又有点复杂的时候,不妨使用值得依赖的开放源代码Java工具箱并使用命令行接口(CLI)。
CLI是一个由Jakarta Commons主持的项目。虽然如果只有一两个参数的话使用它有点大材小用,但是如果你的应用程序从命令行取得它的大部分的设置的话,它是很基本的。
要使用CLI,你需要创建Options类的一个实例:
Options opt = new Options();
有了Options的这个实例,你就可以定义你的应用程序要接受的命令行参数了。实现这个功能的一个方法是使用Options类的addOption()方法。对于应用程序可以接受的每个选项调用这个方法一次。
opt.addOption("h", false, "Print help
for this application");
opt.addOption("u", true, "The username to use");
opt.addOption("dsn", true, "The data source to use");
在定义好类的参数以后,创建一个CommandLineParser,然后解析传递给main方法的String数组。
BasicParser parser = new BasicParser();
CommandLine cl = parser.parse(opt, args);
现在所有的参数均已被解析,你可以分析解析器返回的CommandLine实例以确实用户提供了什么参数以及参数的值。
if ( cl.hasOption('h') ) {
HelpFormatter f = new HelpFormatter();
f.printHelp("OptionsTip", opt);
}
else {
System.out.println(cl.getOptionValue("u"));
System.out.println(cl.getOptionValue("dsn"));
}
正如上面给出的,你可以使用HelpFormatter类来自动地为你的程序产生有用的信息。
下面是完整的代码:
// OptionsTip.java
import org.apache.commons.cli.BasicParser;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.ParseException;
public class OptionsTip {
public static void main(String args[]) {
try {
Options
opt = new Options();
opt.addOption("h",
false, "Print help for this application");
opt.addOption("u",
true, "The username to use");
opt.addOption("dsn",
true, "The data source to use");
BasicParser
parser = new BasicParser();
CommandLine
cl = parser.parse(opt, args);
if
( cl.hasOption('h') ) {
HelpFormatter
f = new HelpFormatter();
f.printHelp("OptionsTip", opt);
}
else
{
System.out.println(cl.getOptionValue("u"));
System.out.println(cl.getOptionValue("dsn"));
}
}
catch (ParseException e) {
e.printStackTrace();
}
}
}
CLI使你从繁琐的解析命令行参数中解脱出来,使其变成一个很简单的任务。如需要了解更多相关信息,可以查看其文档。