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

Java命令行界面(第28部分):getopt4j相关推荐

  1. java面试题28 牛客 下面有关java classloader说法错误的是?

    java面试题28 牛客 下面有关java classloader说法错误的是? A Java默认提供的三个ClassLoader是BootStrap ClassLoader,Extension Cl ...

  2. Java命令行界面(第30部分):观察

    这个有关Java命令行参数解析的系列文章由四个月来发表的29篇文章组成,涵盖了28个不同的开放源代码库,可用于解析Java命令行参数. 这篇文章收集了可以从本系列的前29篇文章中得出的一些观点,并提供 ...

  3. Java命令行界面(第10部分):picocli

    picocli主页面将picocli描述为"强大的微小命令行界面"," picocli"是一个文件Java框架,用于解析命令行参数并生成精美,易于定制的用法帮助 ...

  4. Java命令行界面(第21部分):航空公司2

    本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库. Airline 2的GitHub项目页面描述了该库," Airline是一个Java库,提供了基于注释的 ...

  5. Java命令行界面(第1部分):Apache Commons CLI

    尽管我通常使用Groovy编写要从命令行运行的JVM托管脚本,但是有时候我需要解析Java应用程序中的命令行参数,并且有很多库可供Java开发人员用来解析命令行参数. 在本文中,我将介绍这些Java命 ...

  6. Java命令行界面(第24部分):MarkUtils-CLI

    本系列中有关使用Java解析命令行参数的第一篇文章介绍了Apache Commons CLI库. 这是本系列中介绍的基于Java的命令行解析库中最古老的,而且可能是最常用的之一. Apache Com ...

  7. Java命令行界面(第18部分):JCLAP

    Giles Winstanley的JCLAP ( Java命令行参数解析器 )是基于Java的命令行处理库的系列文章中介绍的第18个库. 这篇文章的示例基于需要Java 8的 JCLAP 1.4 . ...

  8. Java命令行界面(第7部分):JCommander

    这是我系列的第七篇文章,简要介绍了用于处理Java命令行参数的各种库. 这篇文章回到了基于注释的库的覆盖范围,该库似乎是在Java中可用于处理命令行参数的众多可用库中知名度最高和最受欢迎的库之一: J ...

  9. Java的知识点28——线程的生命周期

    线程的生命周期 一个线程对象在它的生命周期内,需要经历5个状态. 1.  新生状态(New): 用new关键字建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用 ...

最新文章

  1. Linux中Sleep和Wait命令的使用方式
  2. ajax mysql项目 react_React16时代,该用什么姿势写 React ?
  3. [剑指offer]面试题1:赋值运算符函数
  4. oracle怎么判断地址相似,如何查看oracle数据文件的地址
  5. anaconda成功安装fasttext后,无法导入的情况
  6. Neural3DMM与螺旋卷积
  7. iOS http文件下载
  8. Html炫酷代码例程
  9. U8glib学习使用(详细版)
  10. 揭密win7pe制作全过程
  11. Deformable Convolutional Networks论文翻译——中文版
  12. 简单理解函数f(x;θ)中分号的含义
  13. C++洛谷题解(8)
  14. kelvin模型蠕变方程_岩石力学复习资料
  15. 有关智能操作系统的讨论
  16. proteus仿真控制电机正转、反转和停止转动
  17. 多阈值小波包去噪matlab,小波包多阈值去噪法及其在形变分析中的应用
  18. 实训项目日志(一)——剧本规划
  19. 这里是通过QQ邮箱 sina新浪邮箱 163邮箱的简单发送Email
  20. 果你的浏览器关闭了 java,为什么关闭不了网页?

热门文章

  1. 20、mysql中触发器的使用
  2. 15、sql编程基本语法介绍
  3. JVM 调优系列之监控工具
  4. 关于Java你不知道的10件事
  5. 去BAT面试完的Mysql面试题总结(55道)
  6. 【Mysql】win10上Mysq的l安装
  7. 深入C#中的String类
  8. 可以代表学计算机的标志,桌面上的图标可以用来表示
  9. 猜数字游戏 : 共给玩家10次机会,若第一次就猜对了,显示‘您真是个天才’,若10也没猜对,显示“您太笨了,下次努力吧!”, 若是第2-10次猜对了,只简单的显示:“恭喜您猜对了”。
  10. python tkinter 背景色改变不了_python - Tkinter背景颜色问题 - 堆栈内存溢出