Java 命令行接口(第 16 部分):JArgp

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

本文中介绍的基于 Java 的命令行参数处理库是 IBM developerWorks 文章Java 编程动态,第 3 部分,应用反射的特色库(这篇 2003 年的文章是2016 年“存档”,但仍可用于PDF 下载)。该库名为 JArgpJava 命令行参数处理库),在其主页 上定义为“用于处理命令行的库” Java 中的参数。”此页面补充说,“与大多数其他此类库不同,JArgp 使用反射将实际值直接存储到目标应用程序对象中的字段。” JArgp 1.0 在这篇文章中有特色。

JArgp 是一个简约的库,如 JArgp JAR 中的少量类所示。

“定义”阶段在 JArgp 中通过指定 ParameterDef 实例数组来完成。可以编写自定义类来扩展 ParameterDef 类,但我将能够使用此类的两个提供的扩展(StringDefBoolDef ) 来实现本系列早期文章中实现的文件路径/名称和详细参数。下一个代码清单对此进行了举例说明(完整代码将在 GitHub 上提供)。

使用 JArgp 的“定义”阶段

private static final ParameterDef[] PARAMETERS_DEFINITIONS =
{
   new StringDef('f', "file", "File path and name"),
   new BoolDef('v', "verbose", "Verbosity level")
};

ParameterDef 的构造函数的初始参数 - 扩展类 StringDefBoolDef 是将成为命令行标志的单个字符。在这种情况下,定义的命令行参数标志将为文件路径/名称的“-f”和冗长的“-v”。每个构造函数的第二个参数是类字段的名称,与命令行标志关联的任何值都将写入该字段。每个构造函数的第三个参数是对该命令行参数标志的描述。据我所知,无法指定“长”参数名称(在这种情况下无法指定 --file--verbose)。

“解析”阶段在 JArgp 中完成,调用静态 ArgumentProcessor 方法 processArgs(String[], ParameterDef[], Object)。这在下一个代码清单中得到了举例说明。

JArgp 中的“解析”

final Main instance = new Main();
// The integer returned by the next invocation is actually the
// zero-based index of next argument to be processed
final int numberArgumentsProcessed
   = ArgumentProcessor.processArgs(
arguments, PARAMETERS_DEFINITIONS, instance);

JArgp 的“询问”阶段是通过访问实例中名称与参数定义中提供的字段相匹配的字段来实现的。这显示在下一个代码清单中。

JArgp 中的“审讯”阶段

out.println(
     "File path/name is " + instance.file
   + " and verbosity is " + instance.verbose);

到目前为止显示的代码的使用在下一个屏幕快照中进行了演示。

如果我想在定义命令行标志时应用我提供的描述,我可以使用 instance 方法方法进行解析,而不是之前显示的 static 函数方法.这在下一个代码清单中进行了演示。

final Main instance = new Main();
final ArgumentProcessor argumentProcessor
   = new ArgumentProcessor(PARAMETERS_DEFINITIONS);
argumentProcessor.processArgs(arguments, instance);
argumentProcessor.listParameters(50, out);

前面代码清单的最后一行演示了如何使用 ArgumentProcessor.listParameters(int, PrintStream) 方法将标志及其描述写入输出。此输出显示在下一个屏幕快照中。

在选择框架或库以帮助在 Java 中进行命令行解析时,需要考虑 Jargp 的一些特性。

  • JArgp 是开源的,其许可证可以在主项目页面Sosnoski Software Associates)上查看。
  • jargp.jar 文件只有 10 KB 左右。
  • 这篇文章中介绍的 JArgp 库不同于另一个也称为 JArgP – Java 命令行参数解析器 的库(JArgp 来自 < span>Sosnoski Software Associates 与 Munkei Software 的 JArgP

JArgp 是一个用于处理 Java 命令行参数的简约库。默认情况下,它不支持“长”参数名称,并且不支持与本系列中介绍的其他一些库一样多的功能,但它体积小且易于使用。我将其包含在本系列中主要是因为它的背景与 IBM DeveloperWorks 文章 相关。

其他资源

  • JArgp 项目页面
  • JArgp 下载 (SourceForge)
  • JArgp API 文档 (Javadoc)
  • Java 编程动态,第 3 部分,应用反射:构建命令行参数框架
标签2: Java教程
地址:https://www.cundage.com/article/jcg-java-command-line-interfaces-part-16-jargp.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...