java登录界面命令_Java命令行界面(第8部分):Argparse4j

java登录界面命令

Argparse4j是“ Java命令行参数解析器库”,其主页将其描述为“基于Python的argparse模块的Java命令行参数解析器库”。 在本文中,我将简要介绍如何使用Argparse4j 0.7.0处理命令行参数,该参数类似于本系列中的前七篇文章中有关Java命令行处理的剖析。

可以通过ArgumentParser接口及其addArgument(String ...)方法完成使用Argparse4j进行命令行处理的参数“定义”阶段 。 addArgument(String...)方法的返回类型是Argument接口的实例。 该接口的实现(通常是ArgumentImpl )提供了用于设置每个参数的特征的方法。 因为这些方法中的每一个都返回一个Argument实例,所以这些调用可以以非常流畅的方式链接在一起。 下一个屏幕快照对此进行了演示。

Argparse4j的“定义”阶段

final ArgumentParser argumentParser =ArgumentParsers.newArgumentParser("Main", true);
argumentParser.addArgument("-f", "--file").dest("file").required(true).help("Path and name of file");
argumentParser.addArgument("-v", "--verbose").dest("verbose").type(Boolean.class).nargs("?").setConst(true).help("Enable verbose output.");

在上面的代码清单中,使用静态初始化方法实例化了ArgumentParser的实例,该实例需要一个String参数来表示使用或帮助输出中将包含的脚本或程序名称 。 ArgumentParsers的newArgumentParse(String,boolean)方法的第二个参数指定将自动支持“帮助”选项 -h--help

上面的代码清单中定义的第一个参数允许在命令行上指定文件路径和名称。 字符串“ -f”和“ -file”被传递到addArgument(String...)方法,这意味着-f--file可以在命令行上使用以指定文件路径和名称。 在作为第一个参数的说明的一部分而创建的Argument实例上,调用了另外三个方法[ dest(String) , required(boolean)和help(String) ]。 这三种方法分别指定一个名称,可以在代码中引用该参数,该参数必须出现在命令行中,以及在请求该参数的帮助时要显示的字符串。

上面的代码清单中定义的第二个参数将字符串“ -v”和“ -verbose”传递给addArgument(String...)方法,以允许在命令行上使用短名称或长选项名称表示此参数。 。 像第一个参数一样,该名称的名称将由dest(String)方法设置的代码中引用,并使用help(String)方法指定其用于“帮助”输出的help(String) 。 第二个参数不是必需的,因此这里required(boolean)方法。

第二个参数的定义对Argument调用了一些其他方法。 我使用type(Class <T>)演示了显式指定参数所需的Java数据类型的功能。 我还需要指定nargs(String)和setConst(Object)方法的组合,以指定verbosity参数不需要该标志提供的值。 这使我可以在期望明确说明的那些选项之后指定-v--verbose ,而没有“ true”或“ false”。

argparse4j通过调用ArgumentParser的parseArgs(String [])方法来支持命令行处理的“解析”阶段。 下一个代码清单演示了这一点。

使用Argparse4j“解析”命令行参数

final Namespace response = argumentParser.parseArgs(arguments);

解析只需要一个语句,并返回Namespace的一个实例。

使用Argparse4j进行命令行处理的“询问”阶段涉及从Namespace实例包装的Map中访问已解析的命令行参数。 该映射的键是使用dest(String)方法指定的字符串,并且映射的值是与那些参数名称关联的值。 在下一个代码清单中将演示如何查询这些值。

用Argparse4j“询问”命令行参数

final String filePathAndName = response.getString("file");
final Boolean verbositySet = response.getBoolean("verbose");out.println("Path/name of file is '" + filePathAndName+ "' and verbosity is "+ (Boolean.TRUE.equals(verbositySet) ? "SET" : "NOT SET")+ ".");

在刚刚列出的代码中,使用了“文件”和“详细”键,因为在定义预期参数时, dest(String)方法提供了相同的字符串。

可以在GitHub上查看提取上述代码段的完整源代码。

下一个屏幕快照演示了不带任何参数的简单Java应用程序的运行以及显示的有关缺少的必需“文件”参数的消息。

上面的屏幕快照中显示的所有大写“ FILE”来自在定义预期参数时在dest(String)方法中指定的dest(String) 。 换句话说,该dest(String)规范既设置了用于在内部键入参数映射的字符串,又设置了在帮助/用法中显示的目标字符串。

下一个屏幕快照展示了“文件”和“详细”选项的典型用法的几种变体。

最终的屏幕快照演示了为-h--help选项提供的帮助信息,因为ArgumentParser的原始实例是使用“ addHelp”参数设置为true

在选择框架或库来帮助Java进行命令行解析时,需要考虑Argparse4j的一些其他特征。

  • Argparse4j是开源的,并获得MIT许可证的许可 。
  • argparse4j-0.7.0.jar (2015年12月)的大小约为89 KB,没有其他第三方库依赖项。
  • Argparse4j不使用注释。
  • 联机文档包含Clojure示例 。
  • 我怀疑使用Python(特别是如果使用argparse )编写脚本的Java开发人员在需要解析命令行参数的Java应用程序中使用argparse4j时会获得好处。
    • (我发现在Java中处理命令行参数时, Apache Commons CLI很直观,因为与Java中相比,我在Groovy中解析命令行参数的频率更高,而且Groovy提供了内置的Apache Commons CLI支持)
  • Argparse4j启发了 Scala的argparse4s 的开发 。

Argparse4j只是许多基于Java的命令行处理库之一。 argparse4j的独特之处在于它的argparse传统,这使其与众多其他选择大相径庭。 鉴于此,我相信最可能选择Argparse4j来满足其Java命令行处理需求的Java开发人员将是那些经常使用argparse解析基于Python的脚本和工具中的命令行参数的开发人员,或者更喜欢Python和argparse的命令解析语义的那些开发人员。 。

其他参考

  • Argparse4j
  • Argparse4j用户手册
  • Argparse4j示例
  • Argparse4j API文档 (Javadoc)
  • Argparse4j源于GitHub
  • Argparse4j版本 (下载)
  • Argparse4j 0.7.0 (Maven)

翻译自: https://www.javacodegeeks.com/2017/07/java-command-line-interfaces-part-8-argparse4j.html

java登录界面命令

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

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

相关文章

协议管理模块设计

文章目录协议和合同的区别协议表说明协议签署日志协议和合同的区别 如果协议的内容写得比较明确、具体、详细、齐全&#xff0c;并涉及到违约责任&#xff0c;即使其名称写的是协议&#xff0c;也是合同&#xff1b;如果协议的内容写得比较概括、原则、很不具体&#xff0c;也…

java登录界面命令_Java命令行界面(第7部分):JCommander

java登录界面命令这是我系列的第七篇文章&#xff0c;简要介绍了用于处理Java命令行参数的各种库。 这篇文章回到了基于注释的库的覆盖范围&#xff0c;该库似乎是在Java中可用于处理命令行参数的众多可用库中知名度最高&#xff0c;最受欢迎的库之一&#xff1a; JCommander 。…

java体系技术框架_java框架之Spring 核心框架体系结构

很多人都在用spring开发java项目&#xff0c;但是配置maven依赖的时候并不能明确要配置哪些spring的jar&#xff0c;经常是胡乱添加一堆&#xff0c;编译或运行报错就继续配置jar依赖&#xff0c;导致spring依赖混乱&#xff0c;甚至下一次创建相同类型的工程时也不知道要配置哪…

IntelliJ IDEA中打开项目时用 Import Project(导入项目) 和 Open(打开项目) 的区别

文章目录创建测试目录使用 Open 方式打开用 Import Project 方式打开用 Open 方式打开文件夹下的多个项目用 Import Project 的方式打开多个项目总结对于 IDEA 中如下图所示的 Import Project 和 Open Project 的区别&#xff0c;一开始不明白怎么回事&#xff0c;网上看了很多…

java命令模式返回值_JAVA 设计模式 命令模式

目录用途命令模式 (Command)将一个请求封装为一个对象&#xff0c;从而使你可以用不同的请求对客户进行参数化&#xff1b;对请求排队或请求日志&#xff0c;以及支持可撤销的操作。命令模式是一种行为型模式。结构图-命令模式结构图Command: 用来声明执行操作的接口。abstract…

IntelliJ IDEA for Mac 如何创建普通的Java项目_创建项目_新建项目

文章目录创建 Java 新项目的流程普通 Java 项目结构Java 项目结构特例讲解创建 Java 新项目的流程 Create New Project Empty Project &#xff08;1&#xff09;选择【Empty Project】&#xff0c;则项目不会自动创建模块&#xff0c;项目创建成功之后&#xff0c;会自动弹出…

java 集成开发工具_最好的Java开发人员测试和集成工具

java 集成开发工具通过从您的应用程序学习企业APM产品&#xff0c;发现更快&#xff0c;更有效的性能监控。 参加AppDynamics APM导览&#xff01; 无论您是刚刚起步还是已经从事了一段时间&#xff0c;使用正确的工具进行编程都可以对项目的成功产生巨大的影响。 适当的工具使…

aws高额账单_取消堆放以提高延迟并减少AWS账单

aws高额账单大多数性能问题可以通过几种不同的方式解决。 多数人都容易理解和应用许多适用的解决方案。 一些解决方案&#xff08;例如从JVM管理的堆中删除某些数据结构&#xff09;更加复杂。 因此&#xff0c;如果您不熟悉此概念&#xff0c;我建议您继续学习我们最近如何减少…

Iphone 手机如何导入/导出通讯录

打开苹果云官网&#xff0c;选择「通讯录」&#xff0c;点击左下角的「设置」&#xff0c;可以看到导入/导出菜单 点击进入 icloud 官网

intellij远程调试_IntelliJ中的远程调试Wildfly应用程序

intellij远程调试远程调试Java应用程序意味着使用本地开发环境连接到远程运行的应用程序。 Java开箱即-agentlib:jdwp[options]支持远程调试&#xff1a;目标应用程序必须使用-agentlib:jdwp[options]选项执行&#xff0c; -agentlib:jdwp[options]选项加​​载Java调试线协议&…

微信小程序注册/登录接口开发

文章目录后端有关说明前端有关说明接口设计小程序注册/登录接口APP 注册/登录接口PC Web 端的注册/登录接口小程序注册/登录序列图校验 token后端有关说明 登录和注册的逻辑要独立抽取写成2个接口&#xff1a;注册接口、登录接口 小程序、APP、PC端的登录接口和注册接口要分开…

couchbase_使用Portworx和Couchbase的有状态容器

couchbase容器本应是短暂的&#xff0c;因此可以很好地扩展以用于无状态应用程序。 有状态的容器&#xff08;例如Couchbase&#xff09;需要区别对待。 管理Docker容器的持久性概述了如何管理有状态容器的持久性。 该博客将说明如何使用Docker Volume Plugins和Portworx创建有…

在 MyEclipse 中配置 tomcat

在 IDE 配置 tomcat 实则就是让 IDE 来管理 tomcat 配置 步骤 1 点击工具栏上的“Run/Stop/Restart MyEclipse Servers”图标旁边的下拉箭头 步骤 2 选择“Configure Server” 步骤 3 在弹出的对话框“Preferences”中展开“MyEclipse” – “Servers” – “Tomcat”–“To…

java 中怎么加汉字,jquery怎么向body里面增加文字

jquery如何向里面增加文字jsp代码是这样的&#xff1a;我想在页面加载时动态的将一行文字增加到里面&#xff0c;不知道为什么总是加不进去&#xff0c;js代码如下&#xff1a;$(document).ready(function(){if($("#type").val()"MESSAGE") {$(".ke-t…

MacBook 推出移动硬盘时总是提示有程序在使用它,如何解决?

如下图所示&#xff1a; 先使用命令 df -lh 在终端查看当前系统的所有硬盘&#xff0c;命令如下&#xff1a; liaowenxiongliaowenxiongdeMacBook-Air ~ % df -lh Filesystem Size Used Avail Capacity iused ifree %iused Mounted on /dev/disk1s5s1 234Gi…

java登录界面命令_Java命令行界面(第5部分):JewelCli

java登录界面命令细算在Java命令行处理与Apache的百科全书CLI &#xff0c; args4j &#xff0c; jbock和命令行中先前的文章&#xff0c;我把注意力转向在这个岗位使用JewelCli完成的命令行参数相似的处理Java中。 几个Java命令行处理库使用批注来定义命令行选项。 到目前为止…

matlab 三维图像配准,[转载]Matlab实现多种图像配准(转)

本文讲述如何利用Matlab Image Processing Toolbox中的图像配准工具实现线性正投影、仿射、投影、多项式、分段线性、局部加权平均配准的过程。实验平台X86 PC&#xff0c;Windows XP sp2, Matlab 7.1资源的获取matlab工具的使用方法&#xff1a;查看帮助mage Processing Toolb…

oauth2和jwt_OAuth2,JWT,Open-ID Connect和其他令人困惑的事物

oauth2和jwt免责声明 如果觉得我必须从一个重要的免责声明开始这篇文章&#xff1a; 不要太相信我要说的话。 我之所以这样说&#xff0c;是因为我们正在讨论安全性。 而且&#xff0c; 当您谈论安全性时&#xff0c;除了100&#xff05;正确的陈述外&#xff0c;还有冒任何其他…

matlab的exec程序,C++调用Matlab画图的一段程序

劳动节闲来无事&#xff0c;写了一天程序&#xff0c;just for fun.看&#xff0c;这是C调用Matlab画图的一段程序。暂时不想多解释了&#xff0c;有兴趣的话&#xff0c;看看下面的代码吧。以下几段代码由上到下&#xff0c;越来越旧。最上面的是最新更新的版本。#include#inc…

java args_Java命令行界面(第2部分):args4j

java args在上一篇文章中 &#xff0c;我研究了使用Apache Commons CLI在Java应用程序中解析命令行参数。 在本文中&#xff0c;我将使用另一个库args4j进行相同的操作。 args4j采用了一种不同于Commons CLI的方式来指定Java应用程序应期望的命令行参数。 尽管Commons CLI期望…