明辉手游网中心:是一个免费提供流行视频软件教程、在线学习分享的学习平台!

使用 CLI 处理命令行

[摘要]编写处理命令行参数的代码并不是一件很令人兴奋的事,但是有时候依然有必要这样做。在下次需要分析命令行参数并且事情有点复杂的时候,可不要忘了可信赖的开放源代码 Java 工具箱,并使用命令行接口(CLI,Command Line Interface)。   Jakarta Commons 负责 CLI...

   编写处理命令行参数的代码并不是一件很令人兴奋的事,但是有时候依然有必要这样做。在下次需要分析命令行参数并且事情有点复杂的时候,可不要忘了可信赖的开放源代码 Java 工具箱,并使用命令行接口(CLI,Command Line Interface)。

   Jakarta Commons 负责 CLI 项目。虽然说如果只有一两个参数使用它就显得大材小用,但是如果你的应用程序从命令行接受很多设置参数的话,它就是很必要的。

   要使用 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();
   CommandLinecl = 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();
   CommandLinecl = 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();
   }
   }
   }