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

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(383)   2024-01-26 07:14:57

Matthias Laux 博士的 JavaWorld 文章 Processing command line arguments in Java: Case closed 介绍了一个简单的基于 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 设置的,该版本指定标志的字符(“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' 简单地查询是否已指定“-v”标志(并且不担心或期望值与该标志相关联) s 方法 isSet

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

在选择框架或库以帮助在 Java 中进行命令行解析时,需要考虑“jw-options”的一些特征。

  • “jw-options”“库”是开源的,因为它的源代码在 JavaWorld 文章“Processing command line arguments in Java: Case已关闭,源代码包含在 JAR 中,可作为 jw-0816-command.zip ZIP 文件下载。”然而,这个“图书馆”的许可证并不明显。
  • “jw-options”库很小:options.jar 文件大小约为 13 KB。
  • 据我所知,没有办法用“jw-options”指定带有双连字符的“长”标志名称。
  • 在“jw-options”jar 中的类上运行的javap 命令显示“major version: 49”,这意味着它是针对J2SE 5< 编译的/span> 并且应该与在 J2SE 5 一样古老的 Java 上运行的应用程序一起工作(我注意到在 StringBuilder 的代码中使用了 StringBuffer效果也一样)。

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

其他参考资料

  • JavaWorld 文章:在 Java 中处理命令行参数:案例结束
  • 源代码和库 Zip 文件下载
标签2: Java教程
地址:https://www.cundage.com/article/jcg-java-command-line-interfaces-part-17-jw-options.html

相关阅读

Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
课程大纲 Elasticsearch 是一个基于 Lucene 的搜索引擎。它提供了一个分布式的、支持多租户的全文搜索引擎,带有 HTTP Web 界面和无模式的 JSON 文档。 Elasti...
解析器是强大的工具,使用 ANTLR 可以编写可用于多种不同语言的各种解析器。 在这个完整的教程中,我们将: 解释基础:什么是解析器,它可以用来做什么 查看如何设置 ANTLR 以便在 Java...
Java中的继承是指子类继承或获取父类的所有非私有属性和行为的能力。继承是面向对象编程的四大支柱之一,用于提高层次结构中类之间的代码可重用性。 在本教程中,我们将了解 Java 支持的继承类型,...
Java 是用于开发各种桌面应用程序、Web 应用程序和移动应用程序的最流行的编程语言之一。以下文章将帮助您快速熟悉 Java 语言,并迈向 API 和云开发等更复杂的概念。 1. Java语言...
Java Message Service 是一种支持正式通信的 API,称为 网络上计算机之间的消息传递。 JMS 为支持 Java 程序的标准消息协议和消息服务提供了一个通用接口。 JMS 提...
Java 项目中的一项常见任务是将日期格式化或解析为字符串,反之亦然。解析日期意味着你有一个代表日期的字符串,例如“2017-08-3”,你想把它转换成一个代表 Java 中日期的对象,例如Ja...
之前,我介绍了spring 3 + hibernate 集成 示例和struts 2 hello world 示例。在本教程中,我将讨论在将 spring 框架与 struts 与 hibern...