getopt java_Java命令行界面(第28部分):getopt4j

getopt java

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 License 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

getopt java

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334374.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

matlab 返回变量类型的命令,MATLAB主要命令汇总

MATLAB主要命令汇总1、常用信息help:在线帮助(显示在命令窗)。helpwin:在线帮助(独立窗口显示)。ver:MATLAB及工具箱的版本信息。2、管理工作区命令who:显示当前变量。whos:显示当前变量具体信息。clear:从内存中清楚变量和函数。quit:退出MATLAB。3、管理命令和函数what:显示当…

springboot redis token_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验

优质文章&#xff0c;及时送达作者 | wangzaiplus链接 | www.jianshu.com/p/6189275403ed一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单支付接口, 重复支付同一笔订单只能扣一次钱支付宝回调接口, 可能…

语言代号/地区代号/国家代号

国家/地区语言代码简体中文(中国)zh-cn繁体中文(台湾地区)zh-tw繁体中文(香港)zh-hk英语(香港)en-hk英语(美国)en-us英语(英国)en-gb英语(全球)en-ww英语(加拿大)en-ca英语(澳大利亚)en-au英语(爱尔兰)en-ie英语(芬兰)en-fi芬兰语(芬兰)fi-fi英语(丹麦)en-dk丹麦语(丹麦)da-dk英…

java 示例_功能Java示例 第2部分–讲故事

java 示例这是称为“ Functional Java by Example”的系列文章的第2部分。 我在本系列的每个部分中开发的示例是某种“提要处理程序”&#xff0c;用于处理文档。 在上一部分中&#xff0c;我从一些原始代码开始&#xff0c;并应用了一些重构来描述“什么”而不是“如何”。 …

python如何读取文件内容求和_使用python对文件中的数值进行累加的实例

问题描述&#xff1a; 一个文件由若干条记录组成&#xff0c;记录的格式为&#xff1a;“num1 num2”&#xff0c;有时候&#xff0c;需要统计文件中num1对应的num2的总值。 处理问题的思路 用传说中的python来处理&#xff0c;很方便。几行代码就可以了。 处理思路&#xff1a…

基2FFT算法matlab程序编写,频率抽取(DIF)基2FFT算法的MATLAB实现

频率抽取(DIF)基2FFT算法和时间抽取(DIT)基2FFT算法是两种等价的FFT算法&#xff0c;其相同之处&#xff1a;(1)DIF与DIT两种算法均为原位运算。(2)DIF与DIT运算量相同。不同之处&#xff1a;(1)DIF的算法结构是将DIT算法结构倒过来。 DIF为输入顺序&#xff0c;输出乱序。运算…

Linux 命令之 localectl -- 控制系统的本地化与键盘布局

文章目录命令介绍常用选项参考示例&#xff08;一&#xff09;显示当前的本地化设置与键盘映射&#xff08;二&#xff09;设置系统的本地化字符集环境变量&#xff08;三&#xff09;列出本地所有字符集&#xff08;四&#xff09;列出所有可用的控制台键盘映射&#xff08;五…

Linux 命令之 locale -- 设置和显示程序运行的语言环境

文章目录命令介绍locale 设置规则使用详解&#xff08;一&#xff09;查看当前 locale 设置&#xff08;二&#xff09;查看当前系统所有可用 locale&#xff08;三&#xff09;设置系统的 locale命令介绍 locale 是 Linux 系统中多语言环境的设置接口&#xff0c;在 Linux 中…

python range函数范围_Python range函数

Python range函数教程 range函数详解 语法 range(start, stop[, step]) 参数 参数 描述 start 计数从 start 开始。默认是从 0 开始。 stop 计数到 stop 结束&#xff0c;但不包括 stop。 step 步长&#xff0c;默认为1&#xff0c;可以支持负数。 返回值 返回生成的序列。 案例…

php sapi globals,PhP 常见安装错误

ext/iconv/.libs/iconv.o: In function php_iconv_stream_filter_ctor’:/home/king/php-5.2.13/ext/iconv/iconv.c:2491: undefined reference to libiconv_open’collect2: ld returned 1 exit statusmake: *** [sapi/cli/php] Error 1[roottest php-5.2.13]# vi Makefile在安…

openpyxl删除添加excel列_Python | 如何使用Python操作Excel(二)

0 前言在阅读本文之前&#xff0c;请确保您已满足或可能满足一下条件&#xff1a;请确保您具备基本的Python编程能力。请确保您会使用Excel。请确保您的电脑已经安装好Python且pip可用。请确保您已经读过前文&#xff1a;如何使用Python操作Excel(一)LogicPanda&#xff0c;公众…

Linux 命令之 timedatectl -- 查看系统当前时区设置

timedatectl命令用于查看当前时区设置。 # 查看当前时区设置 $ timedatectl# 显示所有可用的时区 $ timedatectl list-timezones # 设置当前时区 $ sudo timedatectl set-timezone Americ…

payara 创建 集群_使用Payara Micro的Easy Java EE Microservices

payara 创建 集群想知道如何开始使用Java EE Microservices&#xff1f; 使用Java EE API部署微服务只需要几个快速步骤。 许多人认为Java EE对于与微服务一起使用而言过于繁重&#xff0c;但事实并非如此……尤其是如果您仅利用服务所需的Java EE规范。 在这篇简短的文章中&am…

php导出页面居中设置,PHPExcel导出插入图片和居中问题

首先到网上先下载PHPExcel下载后解压得到这两个文件下载后引用该文件最后编写相关代码&#xff1a;首先是图片插入导出$objDrawing new PHPExcel_Worksheet_Drawing();$objDrawing->setName(‘Photo‘);$objDrawing->setDescription(‘Photo‘);$objDrawing->setPath…

Linux 命令之 loginctl -- 查看系统当前登录的用户

# 列出当前session $ loginctl list-sessions# 列出当前登录用户 $ loginctl list-users# 列出显示指定用户的信息 $ loginctl show-user ruanyf

两台电脑通过usb共享网络_怎样让电脑通过手机共享上网?

手头有部七年前买的安卓智能手机已经不用了&#xff0c;卖掉不值钱&#xff0c;放在家里也是浪费。能否让它继续发挥余热呢&#xff1f;最近找到了一个好办法&#xff0c;就是可以让个人电脑通过它来上网&#xff08;如下图所示&#xff09;&#xff1a;1. 用数据线将电脑与手机…

有效期判断功能 java_有效的Java第三版有哪些新功能?

有效期判断功能 java自从听说即将出版的有效Java 第三版以来&#xff0c;我一直想知道其中有什么新内容。 我假设将涵盖自Java 6以来引入Java的功能&#xff0c;的确如此。 但是&#xff0c;第三版Java开发人员经典版也有一些其他更改。 在本文中&#xff0c;我提供了有关在第三…

Linux 命令之 touch -- 创建文件

文章目录命令介绍常用选项命令示例&#xff08;一&#xff09;创建空文件&#xff08;二&#xff09;批量创建文件&#xff08;三&#xff09;修改文件的访问时间命令介绍 touch 命令有两个功能&#xff1a;一是用于把已存在文件的时间戳更新为系统当前的时间&#xff08;默认…

linux redis客户端_你见过能把Redis的主从复制讲这么明白的吗?

概念1.Conception(概念)Redis的复制也就是我们所说的主从复制&#xff0c;主机数据更新后根据配置和策略&#xff0c;自动同步到备机的master/slaver机制&#xff0c;Master以写为主&#xff0c;Slave以读为主。2.Function(功能)读写分离(秉持与RDBMS 相同的设计理念)容灾恢复R…

lombok 简化代码_如何编写更少,更好的代码,或Project Lombok

lombok 简化代码我长期以来一直打算写有关Lombok的文章 &#xff0c;以至于每当一个自重的Java开发人员都已经听说过它时&#xff0c;我可能会写它。 尽管如此&#xff0c;值得一提的是&#xff0c;如果只是提醒自己&#xff0c;不要犹豫&#xff0c;尝试性能增强工具并查看它们…