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,一经查实,立即删除!

相关文章

c语言找出公共子字符串,经典C语言面试题:求解最大公共子串

今天去面试&#xff0c;面试官出了一道题&#xff0c;求两个字符串的最大公共子串(Longest Common Substring)&#xff0c;一听起来不是很难&#xff0c;但让我在纸上写着写着就迷糊了。回来特地网搜了一下。面试下面经过两种方法来求两个字符串的最大连续公共子串。数组方法1&…

c语言中如何防止输入的格式存在错误,C语言如何避免输入

C语言如何处理输入下面这个题&#xff0c;数据的处理很简单&#xff0c;方法也很多。但是数据的输入如何处理呢&#xff0c;还要分多行输入&#xff01;&#xff01;引用标题&#xff1a;错误票据某涉密单位下发了某种票据&#xff0c;并要在年终全部收回。每张票据有唯一的ID号…

lucene 增加相关性_事务性Lucene

lucene 增加相关性许多用户不喜欢Lucene API的事务性语义&#xff0c;以及这在搜索应用程序中如何有用。 首先&#xff0c;Lucene实现了ACID属性&#xff1a; 一个 tomicity&#xff1a;当您在更改&#xff08;添加&#xff0c;删除文件&#xff09; IndexWriter会话&#xff…

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

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

JavaParser生成,分析和修改Java代码

作为开发人员&#xff0c;我们经常鄙视手动进行重复工作的人员。 我们认为&#xff0c; 他们应该实现这一目标 。 尽管如此&#xff0c;我们还是进行与编码有关的所有活动。 当然&#xff0c;我们使用的高级IDE可以为我们执行一些重构&#xff0c;但这基本上就是结束了。 我们…

C语言去括号编程题,去括号 - C语言网

题目描述当老师不容易&#xff0c;尤其是当小学的老师更难:现在的小朋友做作业喜欢滥用括号。虽然不影响计算结果&#xff0c;但不够美观&#xff0c;容易出错&#xff0c;而且可读性差。但又不能一棒子打死&#xff0c;也许他们就是将来的“陈景润”呢&#xff01;为了减轻老师…

c语言中删除有序数组中重复元素,去除有序列表中的重复元素

2014-10-27 09:13:00更新你仔细研究一下我写的 testAsignPoint 和 testAsignPointAgain 函数就会明白为什么你的二级指针无效了。还是那句话&#xff0c;你要记住&#xff0c;指针就是一个变量&#xff0c;存的是32位数据&#xff0c;记住这个才能真正的理解指针。另外 pezy 说…

阿卡接口_阿卡vs风暴

阿卡接口我最近在Twitter的Storm上工作了一段时间&#xff0c;这让我想知道&#xff0c;它与另一个高性能的并发数据处理框架Akka相比如何 。 什么是Akka和Storm&#xff1f; 让我们从两个系统的简短描述开始。 Storm是一种分布式实时计算系统。 在Storm集群上&#xff0c;您执…

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

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

连续交付友好的Maven版本

持续交付管道需要可预测的软件和依赖版本。 Maven软件项目中常见的快照版本与“持续交付”背后的动机背道而驰。 为了将快照版本更新为发行版本&#xff0c;开发人员通常手动或通过诸如maven-release-plugin来编辑pom.xml文件。 但是&#xff0c;Maven还提供了将版本号定义为属…

android u盘检测工具,android USBU盘 接入检测

如果是在注册的静态广播一般必须含有以上的权限&#xff0c;这里必须注意添加如果在代码中注册广播则必须iFilter.addDataScheme("file")这样接受广播判断U盘public class RemovableDiskManagerReceiver extends BroadcastReceiver {public RemovableDiskManagerRece…

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 音量键 广播,【Android 7.0 Audio】: 按键调节音量的调用过程

转载自http://blog..net/xiashaohua/article/details/53842337只简单描述调用过程&#xff0c;需对照代码看&#xff0c;不画图了&#xff0c;也不贴代码)1.在key Event处理部分&#xff0c;Phonewindow会捕获到音量按键事件&#xff0c;Phonewindow.onkeydown--MediaSessionLe…

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

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

在Payara Server和GlassFish中配置密码

回答Stackoverflow问题可以为我发现我最喜欢的开源工具的正式文档中的空白提供很好的反馈。 我在这里回答的问题之一是如何在docker容器中更改Payara Server主密码 。 显然&#xff0c;在标准服务器安装中&#xff0c;这很简单–只需使用asadmin change-master-password命令&am…

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

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

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

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

tcga癌症亚型获取_将亚型多态性与通用多态性相关联的危险

tcga癌症亚型获取Java 5已将通用多态性引入Java生态系统。 即使我们都知道由于泛型类型擦除及其后果而引起的无数警告&#xff0c;这还是对Java语言的重要补充。 通用多态性&#xff08;也称为参数多态性 &#xff09;通常与可能预先存在的亚型多态性正交。 一个简单的例子是co…

在生产中运行Java:SRE的观点

作为站点可靠性工程师 &#xff08;SRE&#xff09;&#xff0c;我确保我们的生产服务高效&#xff0c;可扩展且可靠。 典型的SRE是生产大师&#xff0c;必须对更广泛的体系结构有很好的了解&#xff0c;并精通许多更精细的细节。 SRE是会说多种语言的程序员&#xff0c;这是很…