使用CLI处理命令行

ZDNet软件频道 时间:2004-03-08 作者:Builder.com |  我要评论()
本文关键词:javatips
编写解析命令行参数的代码并不是一件让人兴奋的工作,但是即使在应用容器和Web服务的年代,有时候这也是必要的。
本文译自Builder.com,未经许可请勿转载

编写解析命令行参数的代码并不是一件让人兴奋的工作,但是即使在应用容器和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使你从繁琐的解析命令行参数中解脱出来,使其变成一个很简单的任务。如需要了解更多相关信息,可以查看其文档


本文作者:David Petersheim是Genscape公司的一位资深Java 开发人员。他设计和开发服务器端应用程序来获取和处理实时能源数据。


责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134