Matthias Laux 博士的 JavaWorld 文章 Processing command line arguments in Java: Case closed 介绍了一个简单的基于 Java 的处理命令行参数的库 我将在本文中将其称为 jw-options。参考文章提供了关于为什么在构造 Options
类时做出某些设计决策的背景信息。文章的“总结”描述了使用附带的类和库的优势:“本文描述了一个 Java 类,它允许方便地处理 Java 程序的命令行选项。该结构足够灵活,甚至可以处理复杂的情况,同时提供一个 API,允许以有限的编码工作定义可接受的命令行语法。”
这篇JavaWorld 文章介绍的“库”由三个Java 类组成:Options
、OptionData
和OptionSet
。下面的屏幕快照显示了 options.jar 的内容,对此进行了演示。
“jw-options”的“定义”阶段是通过其 Options
和 OptionSet
类实现的。这在下一个代码清单中进行了演示(完整的代码清单可在 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
设置的,该版本指定标志的字符(“v”)及其预期出现次数(零出现或单次出现)。
“解析”阶段是通过调用 Options
的 check
方法在“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"));
“审讯”示例演示了使用OptionSet
的getOption
方法访问表示“-f”选项的选项,然后调用其getResultValue(0)
方法访问与该“-f”标志关联的第一个(且仅在本例中)值。该示例中的第二行通过使用 OptionSet
' 简单地查询是否已指定“-v”标志(并且不担心或期望值与该标志相关联) s 方法 isSet
。
下面显示了一个屏幕快照,以演示到目前为止显示的使用“jw-options”的代码。该图显示了未提供预期命令行参数时报告的消息,并以两个按预期使用命令行标志的示例结束。
在选择框架或库以帮助在 Java 中进行命令行解析时,需要考虑“jw-options”的一些特征。
StringBuilder
的代码中使用了 StringBuffer效果也一样)。这篇文章中讨论的“jw-options”“库”最有可能引起那些需要使用旧版本 Java 的命令行处理库或在学术意义上对它感兴趣的人的兴趣。因为这个“库”在 相关的 JavaWorld 文章 中有详细描述,而且它是开源的,所以可以仔细阅读代码并查看文章以了解它是如何完成命令行解析的,以及它为什么使用它方法。鉴于“jw-options”的许可并不明显,并且这是一个相对“旧”的库,似乎没有收到更新,大多数 Java 开发人员可能更喜欢本文中涵盖的一些替代库在许多情况下,“jw-options”系列。
其他参考资料
标签2: Java教程地址:https://www.cundage.com/article/jcg-java-command-line-interfaces-part-17-jw-options.html