getopt4j的页面将其描述为“一个根据GNU样式解析命令行参数的库。” 然后, 页面介绍getopt4j :“'getopt4j'库旨在以与glibc (GNU C运行时库)中的C getopt()函数相同的方式解析命令行选项。 与原始产品相比,它试图以一种更简单,更以Java为中心的方式做到这一点。” 这篇文章描述了如何使用getopt4j来解析命令行选项,其方式与本系列前面27篇文章中介绍的库所用的方式相同。
的“定义”阶段在getopt4j通过实例来实现CLOptionDescriptor
作为下一代码清单证实(完整的源代码是可用在GitHub )。
getopt4j的“定义”阶段
final CLOptionDescriptor fileDescriptor= new CLOptionDescriptor("file",CLOptionDescriptor.ARGUMENT_REQUIRED,'f',"Path and name of file.");
final CLOptionDescriptor verboseDescriptor= new CLOptionDescriptor("verbose",CLOptionDescriptor.ARGUMENT_DISALLOWED,'v',"Is verbosity enabled?");
final CLOptionDescriptor[] optionsDefinitions= new CLOptionDescriptor[]{fileDescriptor, verboseDescriptor};
如上面的代码所示, CLOptionDescriptor
的实例放置在一个数组中,以呈现给getopt4j解析器。
通过实例化CLArgsParser
类在getopt4j中实现“解析”阶段。 该类的构造函数在String[]
数组和代表选项定义的CLOptionDescriptor
实例数组中接受命令行参数。 这显示在下一个代码清单中。
使用getopt4j进行“解析”阶段
final CLArgsParser parser = new CLArgsParser(arguments, optionsDefinitions);
通过在CLArgsParser
实例上调用方法getArguments()
来获取List<CLOption>
,可以完成getopt4j的“询问”阶段。 可以通过其getId()
方法查询CLOption
每个实例,以按其“短”名称(在此示例中为“ f”或“ v” getId()
获取解析的参数。 通过其getId()
方法找到合适的CLOption
实例后,该CLOption
相同实例将通过调用CLOption
的方法getArgument()
方法来提供与该选项在命令行上关联的值。 下一个代码清单中演示了这种“询问”过程。
getopt4j的“审讯”阶段
String filePathAndName = null;
boolean verbose = false;
final List<CLOption> options = parser.getArguments();
for (final CLOption option : options)
{switch(option.getId()){case 'f' :filePathAndName = option.getArgument();break;case 'v' :verbose = true;break;}
}out.println("File path/name is '" + filePathAndName + "' and verbosity is " + verbose);
通过将CLOptionDescriptor
实例的数组传递给静态方法CLUtil.describeOptions(CLOptionDescriptor[])
,getopt4j库使请求使用/帮助信息的请求变得容易。 在下一个代码清单中将证明这一点,当检测到未提供文件路径/名称时,将调用几行代码。
getopt4j的“用法”语句
if (filePathAndName == null)
{out.println("ERROR: The file path/name option is required but was not provided.\n\n"+ CLUtil.describeOptions(optionsDefinitions));
}
接下来的两个屏幕快照中的第一个描述了自动生成的“ usage”语句,当未指定所需的“ file”选项时,代码可以调用该语句。 第二张图片描绘了正在使用的“文件”和“详细”长短名称的各种组合。
选择框架或库来帮助Java进行命令行分析时,要考虑getopt4j的特征。
- getopt4j是开源的,并根据Apache许可2.0版发布。
- getopt4j-1.2.jar JAR文件的大小约为16 KB。
- MVN存储库 (和Maven中央存储库 )上可用的getopt4j-1.2.jar (2016年6月)中的类是根据Java SE 6 (“ 主要版本:50 ”)编译的。
- 该发行版的examples目录中提供了有关如何使用getopt4j的最佳示例。
getopt4j库提供Java风格的类似GNU C getopt()的功能和API 。
其他参考
- getopt4j (GitHub)
- getopt4j 1.2 ( Maven / MVN存储库)
- getopt4j示例
- GNU C getopt()的示例
翻译自: https://www.javacodegeeks.com/2017/10/java-command-line-interfaces-part-28-getopt4j.html