jw摄像_Java命令行界面(第17部分):jw-options

jw摄像

JavaWorld的文章“ 用Java处理命令行参数”: Matthias Laux博士关闭的案例介绍了一个简单的基于Java的库,用于处理命令行参数 ,我在本文中将其称为jw-options 。 被引用的文章提供了有关为何在构造Options类时做出某些设计决策的背景信息。 本文的“结论”描述了使用附带的类和库的优点:“本文介绍了一个Java类,该类允许方便地处理Java程序的命令行选项。 该结构足够灵活,甚至可以处理复杂的情况,同时提供了API,可以用有限的编码工作来定义可接受的命令行语法。

JavaWorld文章介绍的“库”包含三个Java类: OptionsOptionDataOptionSet 。 下面的屏幕快照演示了这一点,该屏幕快照显示了options.jar的内容。

带有“ jw-options”的“定义”阶段是通过其OptionsOptionSet类实现的。 下一个代码清单中对此进行了演示(完整的代码清单可在GitHub上找到 ,此处的示例与本系列以前的文章中使用的示例相似)。

带有jw-options的“ Definition”阶段

final Options options = new Options(arguments, Multiplicity.ZERO_OR_ONE);
final OptionSet defaultOptions = options.getSet();
defaultOptions.addOption("f", false, Separator.BLANK, Multiplicity.ONCE);
defaultOptions.addOption("v", Multiplicity.ZERO_OR_ONE);

刚刚显示的代码清单演示了如何使用几个OptionSet的重载addOption方法。 为了设置文件路径和名称( -f )选项,将调用四参数版本,其中包含标志的单字母(f),标志与其参数之间的分隔符(空格)以及应当预期标志的次数(恰好发生一次)。 冗长性的第二个参数(-v)通过调用addOption的两个参数版本来addOption ,该版本指定标志的字符(v)及其预期出现的次数(零出现或单出现)。

通过调用Optionscheck方法,可以在“ jw-options”中实现“解析”阶段。 顾名思义,此方法也可用于检查参数的准确性。 下一个代码清单中对此进行了演示。

使用jw-options的“解析”阶段

if (!options.check(false, false))
{out.println("ERROR: " + options.getCheckErrors());System.exit(-1);
}

在刚刚显示的“解析”示例中,使用了Options类的方法getCheckErrors()来访问解析参数中的错误,这些错误导致Options.check方法返回false

下一个代码清单中演示了带有“ jw-options”的“询问”阶段。

jw-options的“审讯”阶段

out.println("File path/name is " + defaultOptions.getOption("f").getResultValue(0));
out.println("Verbosity is set to " + defaultOptions.isSet("v"));

“询问”示例演示了如何使用OptionSetgetOption方法访问表示“ -f”选项的选项,然后调用其getResultValue(0)方法访问与该“ -f”关联的第一个(也是在这种情况下)值”标志。 该示例中的第二行仅通过使用OptionSet的方法isSet查询是否已指定“ -v”标志(并且不担心或期望与该标志关联的值)。

接下来显示一个屏幕快照,以演示到目前为止显示的使用“ jw-options”的代码。 该图显示了未提供预期命令行参数时报告的消息,并以两个示例按预期使用命令行标志结尾。

选择框架或库来帮助Java进行命令行分析时,要考虑“ jw-options”的特征。

  • “ jw-options”“库”是开放源代码,因为它的源代码已在JavaWorld文章“ 在Java中处理命令行参数:案例关闭且源代码包含在JAR中可供下载的方式 ”中进行了全面介绍和讨论。 作为jw-0816-command.zip ZIP文件。” 但是,该“图书馆”的许可证并不明显。
  • “ jw-options”库很小: options.jar文件的大小约为13 KB。
  • 据我所知,无法用“ jw-options”用双连字符指定“长”标志名称。
  • 在“ jw-options” jar中的类上运行的javap命令显示“ main version:49 ”,这意味着它是针对J2SE 5编译的,并且可以与运行于J2SE 5的 Java上的应用程序一起使用(我注意到在Java中使用StringBuffer代码在StringBuilder也能正常工作)。

这篇文章中讨论的“ jw-options”“库”最有可能引起那些需要将命令行处理库与旧版Java一起使用或对学术有兴趣的人。 因为此“库”在相关的JavaWorld文章中进行了详细描述,并且因为它是开源的,所以可以细读代码并查看该文章,以了解它如何完成命令行解析以及为什么使用这种方法。 鉴于“ jw-options”的许可证不明显,并且鉴于这是一个相对“老”的库,似乎没有接收到更新,因此大多数Java开发人员可能更喜欢本文档中介绍的某些替代库。在许多情况下,“ jw-options”上的序列。

其他参考

  • JavaWorld文章: 在Java中处理命令行参数:案例关闭
  • 下载源代码和库Zip文件

翻译自: https://www.javacodegeeks.com/2017/10/java-command-line-interfaces-part-17-jw-options.html

jw摄像

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

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

相关文章

pixel和毫米怎么换算_压力传感器相关压力单位换算

压力传感器的应用已经很普遍了,压力传感器各个单间之间应该怎么换算呢,这个问题困扰着很多的客户,今天呢我们就来说一下它们之间的换算。在实际的工程应用中,压强单位常被当作压力单位。比较常见的压力单位包括:bar、K…

mongodb json_在MongoDB和Spring Batch中将XML转换为JSON和原始使用

mongodb json总览 为什么将XML转换为JSON以在MongoDB中原始使用? 由于MongoDB使用JSON文档存储记录,就像表和行将记录存储在关系数据库中一样,我们自然需要将XML转换为JSON。 某些应用程序可能需要存储原始(未修改的)…

java串口发送16进制数据_MFC串口通信发送16进制数据的方法

本文实例为大家分享了MFC串口通信发送16进制数据的具体代码,供大家参考,具体内容如下MFC串口通信会使用m_mscomm控件。发送数据一般是在edit control 里输入自己想发送的内容,然后点击send button。如果直接发送字符串内容,通过下…

python集合和字典的区别_Python中的字典和集合

导语:本文章记录了本人在学习Python基础之数据结构篇的重点知识及个人心得,打算入门Python的朋友们可以来一起学习并交流。 本文重点: 1、掌握常见的字典创建,查询,判别方法; 2、了解字典中的defaultdict、…

apache ignite_Apache Ignite本机持久性,简要概述

apache ignite通过将数据的工作集放入系统内存中,内存中方法可以达到极高的速度。 当所有数据都保存在内存中后,就不再需要处理使用传统旋转磁盘引起的问题。 例如,这意味着无需维护数据的其他缓存副本并管理它们之间的同步。 但是这种方法还…

java jigsaw_Java 9,Jigsaw,JPMS和模块:个人探索

java jigsawJava 9由于Jigsaw项目而延迟了很多次,您可能会听到很多关于模块,模块化和其他内容的信息,那么,这到底是什么呢? 什么是模块化,模块化平台是什么意思? Java平台模块系统(J…

mysql explain 为空_车祸现场!我的MySQL千万级数据表选错索引了!

最近在线上环境遇到了一次SQL慢查询引发的数据库故障,影响线上业务。经过排查后,确定原因是:SQL在执行时,MySQL优化器选择了错误的索引(不应该说是“错误”,而是选择了实际执行耗时更长的索引)。排查过程中&#xff0c…

java登录界面命令_Java命令行界面(第25部分):JCommando

java登录界面命令JCommando 网站 上将JCommando描述为“命令行参数的Java参数解析器”。 JCommando读取XML配置以生成一个Java类,该类处理Java应用程序中的解析。 在提供XML配置的 Java命令行解析库的本系列文章中,以前涵盖的唯一基于Java的库是JSAP &am…

数据追加用什么函数_RL用算法发现算法:DeepMind 数据驱动「价值函数」自我更新,14款Atari游戏完虐人类!...

【新智元导读】击败卡斯帕罗夫的「深蓝」并不是真正的人工智能,它过度依赖了人类设计的规则,而最近DeepMind的一项深度强化学习新研究表明,不用人工介入,完全数据驱动,算法自己就能发现算法。「深蓝」并非以智取胜&…

@cacheable 是否缓存成功_缓存策略:如何使用缓存来减少磁盘IO?

现代的消息队列,都使用磁盘文件来存储消息。因为磁盘是一个持久化的存储,即使服务器掉电也不会丢失数据。绝大多数用于生产系统的服务器,都会使用多块儿磁盘组成磁盘阵列,这样不仅服务器掉电不会丢失数据,即使其中的一…

g++ 安装python_以后再也不用“教程”:让人举一反三的python配置环境过程 + 超简单原理概括!...

前言: 前一阵子至少指导了5位学弟学妹小伙伴配置 python 环境。两年前我入门 python 时,也得照着互联网上的资料,一步一步“照猫画虎”;为什么现在自己可以“凭感觉”一气呵成了呢?我想,原因必然是自己对于…

通过Java和Spring Boot应用程序将Gmail用作SMTP服务器

Gmail用户可以使用Gmail的SMTP服务器smtp.gmail.com从其Spring Boot应用程序发送电子邮件。 为此,让我们在应用程序中进行一些设置: 在application.properties文件中提供SMTP连接属性: spring.mail.hostsmtp.gmail.com spring.mail.username…

java面向对象类似atm的题_Java面向对象练习题之银行存取款

编写Java应用程序。首先定义一个描述银行账户的Blank类,包括成员变量“账号”和“存款余额”,成员方法有“存款”、“取款”和“余额查询”。其次,编写一个主类,在主类中测试Blank类的功能。String ZhangHao;double YuE;Blank(Str…

mongodb如何写入图片_CTO之瞳-数据库-MongoDB

MongoDB,常用的NoSql数据库,在https://db-engines.com/en/ranking 里被分类为文档型数据库。​本文从以下五个方面来了解MongoDB (和上一篇一样,基础操作请查询官方文档或者菜鸟教程)使用场景存储引擎性能测试索引-B树分片与复制1…

小波滤波器与其他滤波器的区别_滤波器国产 VS 国外

一、滤波器技术及产品类型详细分析几次技术应用的潮流引领了声波射频滤波器技术的发展,而SAW滤波器可以说是军用转民用的技术典范。早期国内的SAW滤波器仅用于国防如雷达、通信等方面需求;而该技术的第一次民用,即用于彩电产业,带…

Unix/Linux/BSD 它们之间的关系以及各自派系的介绍

文章目录一、Unix 是什么二、Unix 派系(一)BSD 分支1.BSD 是什么2.由 BSD 衍生的闭源 Unix 版本3.由 BSD 衍生的开源 Unix 版本(二)System V 分支1.System V 是什么2.System V 与 BSD 的版权纠纷,以及 UnixWare 的由来…

arraylist获取前多少位_Java 面试题 :百度前 200 页都在这里

作者:唐尤华,基本概念操作系统中 heap 和 stack 的区别什么是基于注解的切面实现什么是 对象/关系 映射集成模块什么是 Java 的反射机制什么是 ACIDBS与CS的联系与区别Cookie 和 Session的区别fail-fast 与 fail-safe 机制有什么区别get 和 post请求的区…

航空订票系统界面java_Java命令行界面(第21部分):航空公司2

航空订票系统界面java本系列文章的第21篇关于Java中解析命令行参数的文章的重点是Airline 2库。 Airline 2的GitHub项目页面描述了该库,“ Airline是一个Java库,提供了基于注释的框架来解析命令行界面。” 该页面进入状态:航空公司“同时支持…

python爬虫数据_python爬取数据分析

一.python爬虫使用的模块 1.import requests 2.from bs4 import BeautifulSoup 3.pandas 数据分析高级接口模块 二. 爬取数据在第一个请求中时, 使用BeautifulSoupimport requests # 引用requests库 from bs4 import BeautifulSoup # 引用BeautifulSoup库 res_movies requests…

java 迁移数据_Java 9迁移指南:七个最常见的挑战

java 迁移数据我敢肯定,您已经听说过更新到Java 9并不是一件容易的事,甚至可能是不兼容的更新,而且对于大型代码库而言,迁移毫无意义。 这样做之后,我迁移了一个相当大的旧代码库,我可以告诉你,…