简单而功能强大的commonsCLI

上传人:人*** 文档编号:487435511 上传时间:2024-02-27 格式:DOC 页数:16 大小:64KB
返回 下载 相关 举报
简单而功能强大的commonsCLI_第1页
第1页 / 共16页
简单而功能强大的commonsCLI_第2页
第2页 / 共16页
简单而功能强大的commonsCLI_第3页
第3页 / 共16页
简单而功能强大的commonsCLI_第4页
第4页 / 共16页
简单而功能强大的commonsCLI_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《简单而功能强大的commonsCLI》由会员分享,可在线阅读,更多相关《简单而功能强大的commonsCLI(16页珍藏版)》请在金锄头文库上搜索。

1、简单而功能强大的 commons CLI【一】需求前面我们使用了 commons io 包中的 DirectoryWalker 和 IOFileFilter 来进行复杂条件的搜索,但 是这个程序有几个问题:选项都是 hard code 在代码里面,难以修改 有些选项是必需的,有些选项是可选的 有些选项是不带参数的,有些选项是要带参数的如果我 们希望这个程序能够更加灵活,根据人性化,那么我们需要 提供一个界面,无论是普通的命令行、控制台交互、 GUI 界 面。而且还必须让用户自行决定是否要使用该选项。程序必 须自动根据已有的条件动态组合【二】简单而功能强大的 commons CLIApache

2、commons CLI 是一个开源的, 用于处 理命令行的工具包。这个包目前的稳定版本是 1.2 ,他非常 简单只有 20 个左右的 class ,但提供了几乎所以可以用到的 命令行功能。它的主页在这里: Apache commons CLI 根据 CLI 的逻辑,每一个命令行的处理都可以分为 3 个步骤:定 义、解析、交互 定义:定义命令行的各种选项属性 (包括缩写、全写、是 否必须、是否带参数、参数个数限制 ) 解析:使用解析器对命令行选项列表进行解析 交互:从解析好的命令行查询用户输入的参数值并进行处理这里需要区分两个名词:选项 (option) 和参数 (arguments) 。选项是

3、用来表明功能或者参数的意思的, 例如-d”这个字符串就是一个选项,它可以表示一个日期。那么 如果我们需要指定一个日期用于处理,就需要在“-d”后面再加上一个具体值,这个具体值就是参数 (argument) 。对应于 这3个过程,我们来认识几个重要的类:定义阶段A. Option :这个类用于定义命令行的选项,你可以通过构造方法来定义一个选项B. Options : Option 的容器,用于存储多个 OptionC. OptionBuilder :使用描述性 API 来构建 Option ,而非直 接使用 Option 的构造方法解析阶段A. CommandLineParser :接口,定义了

4、 parse 方法由实现 类实现B. PosixParser : Posix 风格的命令行解析器C. GnuParser : GNU 风格的命令行解析器交互阶段A.CommandLine :解析后的命令行对象,可以用于查询选 项的值【三】 CLI 快速入门通常情况下如果命令的选项比较 简单我们使用构造方法就够了,但是当选项的属性比较复杂 或者描述性文本比较长时,使用构建器会令到程序的可读性 更进一步。下面我们来看看这个需求:有这样一个命令行, 它具备如下的选项和参数组合: 一个目录选项: -d ,带参数值,必须选项 一个日期选项: -D ,带参数值,全写 -date ,可选项 一个日期范围选项

5、: -r ,带参数值,当 -D 出现时为必选 项,否则该选项无效 一个文件名前缀选项:-p,带参数值,可以有多个前缀名, 以逗号分隔,可选项 一个文件扩展名选项:-s,带参数值,可以有多个扩展名, 以逗号分隔,可选项 一个文件大小选项:-S ,带参数值,全写 -file-size ,可选项 一个文件大小阀值选项:-I,带参数值,当-S出现时为必 选项,否则该选项无效 一个帮助信息选项:-h ,无参数值【四】代码示例 packageexampIe.io;mons.cIi.CommandLine;import mons.cIi.CommandLineParser;import mons.cIi.H

6、eIpFormatter;import mons.cIi.Option;import mons.cIi.OptionBuiIder;import mons.cIi.Options;import mons.cIi.ParseException;import mons.cIi.PosixParser;/* &It;pre>* 用于指定各种搜索条件* </pre>*/public class SearchCommandLineProcesser implementsCommandLineProcesser /* <pre>* 一个目录选项: -d ,带参数值,必须选项*

7、 一个日期选项: -D ,带参数值,全写 -date ,可选 项* 一个日期范围选项: -r ,带参数值,当 -D 出现时为 必选项,否则该选项无效* 一个文件名前缀选项: -p ,带参数值,可以有多个 前缀名,以逗号分隔,可选项* 一个文件扩展名选项: -s ,带参数值,可以有多个 扩展名,以逗号分隔,可选项*一个文件大小选项:-S,带参数值,全写-file-size , 可选项*一个文件大小阀值选项:-I,带参数值,当-S出现时为必选项,否则该选项无效* 一个帮助信息选项: -h ,无参数值* </pre>.*/ private Options searchOpts = new

8、 Options();/*private CommandLine cl = null;* The main method.* param args the arguments*/public static void main(String args) SearchCommandLineProcesser processer = newSearchCommandLineProcesser();processer.run(args);processer.validte();/*Instantiates a new search command line processer.*/public Sea

9、rchCommandLineProcesser() String desc = Specify the directory where search start;Option optStartDir =OptionBuilder.withDescription(desc).isRequired(false).hasArgs().withArgName(START_DIRECTORY).create(d);searchOpts.addOption(optStartDir);/*Set rule for command line parser, run parsingprocess* param

10、args the args*/private void run(String args) setDate();setDateRange();setPrefix();setSuffix(); setSize();setSizeRange(); setHelp();runProcess(searchOpts, args, newPosixParser();/*Sets the date.*/public void setDate() String desc = Specify the file create date time;Option optDate =OptionBuilder.withD

11、escription(desc).isRequired(false).hasArgs().withArgName(FILE_CREATE_DATE).withLongOpt(date).create(D);searchOpts.addOption(optDate);/*Sets the date range.*/public void setDateRange() StringBuffer desc = new StringBuffer(Specify acceptance date range forcutoff date specify by option -d);desc.append(

12、if true, older files (at or before the cutoff);desc.append(are accepted, else newer ones (after the cutoff);Option optDateRange = null; optDateRange = OptionBuilder.withDescription(desc.toString().isRequired(false).hasArg().withArgNam e(DATE_RANGE).create(r);searchOpts.addOption(optDateRange);/* Set

13、s the prefix.*/public void setPrefix() String desc = Specify the prefix of file, multiple prefixes can be split by comma;Option optPrefix =OptionBuilder.withDescription(desc).isRequired(false).hasArgs().withArgNa me(FILE_PREFIXES).create(p);searchOpts.addOption(optPrefix);/*Sets the suffix.*/public

14、void setSuffix() String desc = Specify the suffix of file, multiple suffixes can be split by comma;Option optSuffix = OptionBuilder.withDescription(desc).isRequired(false).hasArgs().withArgNa me(FILE_SUFFIXES).create(s);searchOpts.addOption(optSuffix);/*Sets the size.*/public void setSize() String desc = Spcify the file size;Option optSize =OptionBuilder.withDescription(desc).isRequired(false).hasArg().withArgName(FILE_SIZE_WITH_LONG_VALUE).withLongOpt(file-size).create(S);searchOpts.addOption(optSize);/* Sets the size range.*/public void setSizeRange() StringBuffer desc

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 演讲稿/致辞

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号