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

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

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

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

相关文章

新版ipados可以编辑C语言吗,iPadOS新增了五个有用的功能,看你需不需要

主屏幕上的可自定义小部件苹果通过“ iOS 14”对“小工具”进行了大修&#xff0c;引入了新的设计&#xff0c;功能和自定义选项。这些“小部件”也出现在在iPhone上&#xff0c;您可以抓住任何小部件并将其添加到应用程序图标旁边的“主屏幕”中&#xff0c;但是不能在“ iPad…

c 语言已知两点求第三点,已知3点座标,求第一点到第二点和第三点构成的直线的距离。...

已知3点座标&#xff0c;求第一点到第二点和第三点构成的直线的距离。以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;已知3点座标&#xff0c;求第一点到第二点和第三点构成的直线的距离。解…

android 组合属性动画,Android属性动画组合(sequence串行、together并行)

在android中用原生api实现一系列复杂动画会很麻烦&#xff0c;所以对属性动画进行了一定封装&#xff0c;让使用起来更简单&#xff0c;能够按照人的思维依次编写动画。简单效果&#xff1a;使用方法&#xff1a;添加依赖&#xff1a;dependencies { compile"com.steven:A…

jta atomikos_带有Atomikos示例的Tomcat中的Spring JTA多个资源事务

jta atomikos在本教程中&#xff0c;我们将向您展示如何使用Atomikos Transaction Manager在Tomcat服务器中实现JTA多个资源事务。 Atomicos事务管理器为分布式事务提供支持。 这些是多阶段事务&#xff0c;通常使用多个数据库&#xff0c;必须以协调的方式提交。 分布式事务由…

台电+android+电话,通话系统_台电 G17s_平板电脑评测-中关村在线

通话系统将两张联通3G的SIM卡插入台电G17s之后&#xff0c;我们来感受一下它通话系统的使用是否令人满意。和一般的双卡Android手机平板一样&#xff0c;该机也不支持热插拔&#xff0c;需要将机器彻底关闭后插入SIM卡再开机。并且在开机后屏幕会弹出SIM卡信息&#xff0c;并询…

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

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

OpenHub框架–下一个有趣的功能

这是有关OpenHub框架的系列文章中的第三篇&#xff0c;第一篇介绍OpenHub框架 &#xff0c;第二篇介绍异步消息传递模型 。 该系列的最后一篇文章将更详细地介绍其他一些有趣的功能&#xff0c;并说明为什么OpenHub可以成为您的集成项目的理想选择的原因。 节流 节流是一种功…

ubuntu生成密钥和证书_基于浏览器的密钥生成以及与浏览器的密钥/证书存储的交互...

ubuntu生成密钥和证书想象以下情况&#xff1a; 您需要从访问您的网站的用户那里获取一个密钥&#xff08;在非对称情况下为用户的公共密钥 &#xff09;&#xff0c;并希望浏览器记住私有部分&#xff0c;而不会因冗长的导入过程而困扰用户。 老实说&#xff0c;实际上&#…

android数据流分类,【Android工程之类】1 MVVM架构 - MVVM与单向数据流

前言这个系列将讲述使用MVVM架构、LiveData、Room、Kodein、Retrofit、EventBus来建立一个统一的、优雅的、可维护的TODO程序&#xff0c;本系列分为多个章节&#xff0c;从0开始一步一步引入这些优秀的库。下图展示的是Jetpack组件库包含的内容&#xff0c;这套的架构方案的核…

java ssl证书_Java安全教程–创建SSL连接和证书的分步指南

java ssl证书在有关应用JEE安全性的系列文章中&#xff0c;我们为您提供了另一个有关如何在Java EE应用程序中创建SSL连接和创建证书的详细教程。 如我们之前的文章中所述&#xff0c; 安全套接字层&#xff08;SSL&#xff09;/传输层安全性&#xff08;TLS&#xff09;将启用…

通过Okta的单点登录保护Spring Boot Web App的安全

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 您可以使用SpringBoot和Okta在不到20分钟的时间内启动具有完整用户身份和授权管理的企…

java ee cdi_Java EE CDI程序化依赖关系消歧示例–注入点检查

java ee cdi在本教程中&#xff0c;我们将看到在注入Java EE CDI bean时如何避免程序依赖消除歧义。 我们已经在Jave EE依赖关系消除歧义示例中展示了如何避免CDI Bean中的依赖关系歧义消除。 在这里&#xff0c;我们将向您展示如何以动态方式避免依赖消除歧义。 我们将通过检查…

atom自动补全html代码,Atom - Emmet插件的使用详解(HTML/CSS代码自动补全)

一、Emmet的安装与介绍Emmet (前身为 Zen Coding) 是一个能大幅度提高前端开发效率的工具&#xff0c;能够实现 HTML、CSS 的快速编写。官网地址&#xff1a;http://emmet.io/官方文档&#xff1a;http://docs.emmet.io/cheat-sheet/Atom的emmet介绍页面&#xff1a;https://at…

html怎么做出相框的效果,PS滤镜制作漂亮的实木相框效果

一、新建一个600 * 800像素的文件&#xff0c;然后新建一个图层&#xff0c;前景颜色设置为红色&#xff0c;背景设置为深红色&#xff0c;执行&#xff1a;滤镜 > 渲染 > 纤维&#xff0c;参数设置如下图。二、执行&#xff1a;图像 > 旋转画布 > 逆时针90度&…

查询阜阳2021高考成绩,2021年阜阳高考成绩排名及成绩公布时间什么时候出来

阜阳高考结束后&#xff0c;每年都有很多家长和考试不知道阜阳高考成绩排名如何查询、阜阳高考成绩什么时候公布以及查询方式&#xff0c;本文小编整理了阜阳高考成绩查询排名的相关知识。一、阜阳高考成绩公布时间及查询方式根据往年阜阳高考成绩公布时间预测&#xff0c;2021…

2021高考厦门一中成绩查询,2021年厦门中考成绩和分数线什么时候公布(附查询入口)...

每年中考结束后很多考生和家长都很关心成绩什么时候公布&#xff0c;中考分数线什么时候公布&#xff1f;然而你离彻底解放就只差一步——查分数&#xff01;查分数&#xff0c;比上考场考试还要紧张啊&#xff01;考分不知道&#xff0c;玩耍似心跳。那么2019年厦门中考成绩什…

Java开发人员应该知道的前20个库和API

优秀且经验丰富的Java开发人员的特征之一是对API的广泛了解&#xff0c;包括JDK和第三方库。 我花了很多时间来学习API&#xff0c;尤其是在阅读了Effective Java 3rd Edition之后 &#xff0c;Joshua Bloch建议在Java 3rd Edition中使用现有的API进行开发&#xff0c;而不是为…

打磨锤子计算机专业,钳工磨锤子实训心得体会

钳工磨锤子实训心得体会实训是职业技能实际训练的简称,是指在学校控制状态下,按照人才培养规律与目标,对学生进行职业技术应用能力训练的教学过程。钳工磨锤子实训心得体会&#xff0c;我们来看看。钳工磨锤子实训心得体会1前言&#xff1a;通过这次的钳工实习报告&#xff0c;…

html编辑器设置为publisher,将PDF转换为Publisher的简单方法

二、 如何把PDF文件转换为Publisher支持的图片格式一些专业的软件或者在线网站都可以帮助我们把PDF文件转换为Publisher支持的图片格式。下面将提供几种支持PDF文件转换为图片格式的方法。(1) 使用都叫兽™PDF转换器进行格式转换热点推荐 - ADs都叫兽™PDF转换器 - 多功能的PDF…

Oracle应用容器云上的WildFly Swarm

在此博客文章中&#xff0c;我将描述如何将打包在WildFly Swarmber -jar中的CloudEE Duke应用程序部署到Oracle Application Container Cloud 。 在Oracle Application Container Cloud中进行部署所需的部署工件是一个ZIP归档文件&#xff0c;其中包含应用程序ber-jar和清单文…