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

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

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

带有jw-options的“定义”阶段

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

Java命令行界面(第17部分):jw-options相关推荐

  1. Java面试题17 牛客 下面哪个选项正确创建socket连接?

    Java面试题17 牛客 下面哪个选项正确创建socket连接? Socket s = new Socket(8080); Socket s = new Socket("192.168.1. ...

  2. paly 框架Cannot load this JVM TI agent twice, check your java command line for duplicate jdwp options.

    今天使用play框架启动项目时候,直接Debug As 执行Demo会报错: ERROR: Cannot load this JVM TI agent twice, check your Java c ...

  3. java项目第17期-小程序团购+商城源码【毕业设计】

    java项目第17期-小程序团购+代理商城源码 1.产品介绍 java小程序+大后台web商城源码 基于ssm的一款电子商城,系统采用maven的父子结构, 1.后台web商城包含的模块有: 会员管理 ...

  4. JAVA17版本_我的世界JAVA版1.17版本内容预览

    我的世界JAVA版的1.17版本预计在2021年中期推出,1.17版本将会有哪些内容呢?下面就给大家带来我的世界JAVA版1.17版本内容预览,以供玩家参考. 版本介绍 1.17是地洞山崖的首个正式版 ...

  5. java poi-ooxml 3.17 excel通用导入导出

    java 使用poi-ooxml 3.17 excel的通用导入导出,导出的样式未做处理,可自行处理 可以在csdn下载或者在gitHub( https://github.com/aojd/excel ...

  6. 黑马程序员 一步一步往上爬 学习毕老师java视频第17,18,19天

    ---------------------- <a href="http://edu.csdn.net/heima" target="blank"> ...

  7. Leetcode算法Java全解答--17. 电话号码的字母组合

    Leetcode算法Java全解答–17. 电话号码的字母组合 文章目录 Leetcode算法Java全解答--17. 电话号码的字母组合 题目 想法 结果 总结 代码 我的答案 大佬们的答案 测试用 ...

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

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

  9. Spring Boot 3.0.0 发布第一个里程碑版本M1,你的 Java 升到 17 了吗?

    欢迎关注方志朋的博客,回复"666"获面试宝典 ‍ ‍文章来源:程序猿DD‍ ‍ 2022年1月20日,Spring官方发布了Spring Boot 3.0.0的第一个里程碑版本M ...

最新文章

  1. mysql修改校对集_MySQL 教程之校对集问题
  2. PDF文字怎么编辑,PDF文档编辑方法
  3. Docker周报:Windows Server将支持Mesos
  4. 读书笔记--MapReduce 适用场景 及 常见应用
  5. opencv 标记有数字的区域
  6. 【Java代码】未分页数据根据参数进行分页(粘贴可用)
  7. C# 三层级架构问题之 能加载文件或程序集或它的某一个依赖项。系统找不到指定的文件
  8. Arduino笔记-解决ESP8266上传代码时出现error: espcomm_upload_mem failed问题
  9. 笨办法学 Python · 续 练习 2:创造力
  10. python图像对比度增强图片清晰度_Python 图像对比度增强的几种方法(小结)
  11. 汽车信息安全标准ISO/SAE21434与UN/WP.29阅读总结
  12. 地理极客的Planet卫星影像指南
  13. 固定成本、可变成本、沉没成本、机会成本、边际成本
  14. 统计|(可/无)重复双因素方差分析一般步骤及分析表
  15. 台式电脑一般价钱多少_一般普通台式电脑价格多少为好?
  16. 考研经验-从入门到成功-有干货-全/非全考研-在职考研
  17. 手机的模拟,有耗电和充电方法, 有电量的属性
  18. Java Cache 缓存方案详解及代码-Ehcache
  19. 新概念二册 Lesson 36 Across the Channel横渡海峡(非限定性定语从句)
  20. 最霸气的程序员辞职理由,阅后即焚!

热门文章

  1. 公众号一年能有多少收入?
  2. 这本书强烈推荐看看!
  3. java实现遍历树形菜单方法——struts.xml实现
  4. ❤️ 爆肝一个月!JAVA零基础入门总结(下)❤️
  5. 服务器登陆显示其他用户,连接远程服务器显示其他用户
  6. pythondocx模板_使用python-docx-template修改word文档
  7. kafka生产者开发方式
  8. 基于springboot2.5.5自建启动器starter制品库
  9. rabbitmq-发布订阅模式
  10. java本地创建zk节点