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登录界面命令