java调用命令行命令_Java命令行界面(第4部分):命令行

java调用命令行命令

我的Java命令行解析系列的第四部分介绍了Commandline ,它被描述为 “用于解析命令行参数的Java库”,它“基于使用注释从命令行参数到对象的映射”。

像以前介绍的args4j和jbock一样, Commandline使用注释来提供潜在命令行选项的“定义”。 然而,虽然args4j通过注释做到这一点的类字段和jbock通过在构造函数及其参数注解做到这一点,命令行使用的“集”(突变)方法的注释。 在本文中,我使用Main类示例,如之前有关基于Java的命令行处理的文章中所述,但是在正常情况下,我通常更喜欢使用一个特殊的类来表示命令行参数。

下面的代码清单演示了如何在“ get”方法上使用Commandline批注,以实现Commandline命令行处理的“ definition”阶段。

命令行处理的命令行“定义”阶段

public class Main
{/** Is verbosity enabled? */private boolean verbose;/** Name/path of applicable file. */private String fileName;@Option@ShortSwitch("v")@LongSwitch("verbose")@Toggle(true)public void setVerbose(final boolean newVerbose){verbose = newVerbose;}@Option@ShortSwitch("f")@LongSwitch("file")@SingleArgument@Requiredpublic void setFileName(final String newFileName){fileName = newFileName;}

上面的代码清单显示了命令行注释@Option以及自定义已定义选项的其他注释的使用(对于短和长参数, @Required @ShortSwitch@LongSwitch ;对于强制参数, @SingleArgument @Required用于指定与switch关联的一个参数的@SingleArgument ;以及@Toggle表示该开关的存在或不重要是重要的[没有与该开关关联的参数]。

下一个代码清单演示了使用Commandline进行命令行解析的“解析”和“询问”阶段。

使用命令行“解析”和“询问”

try
{// "Parsing" stage.final Main main = CommandLineParser.parse(Main.class, arguments, OptionStyle.LONG_OR_COMPACT);// "Interrogation" stage.out.println("You provided file name of '" + main.fileName+ "' and verbose is set to '" + main.verbose + "'.");
}
catch (IllegalAccessException | InstantiationException | InvocationTargetException exception)
{out.println("ERROR: Unable to parse command-line arguments: " + exception);
}

最后一个代码示例演示了使用单个CommandLineParser.parse(Class<T>, String[], OptionStyle)调用即可完成解析CommandLineParser.parse(Class<T>, String[], OptionStyle)并且查询与访问该方法返回的实例成员一样简单。 提供给parse方法的第三个参数很重要,因为它指示解析器如何期望显示开关。

刚刚显示的代码示例使用OptionStyle.LONG_OR_COMPACT ,该文档描述:“长开关前面有两个破折号。 短开关前面加一个破折号,可以连接成一个开关。” 相反, OptionStyle.SIMPLE指示解析器期望“所有开关必须是独立的”和“所有(长和短)开关都必须在命令行前加一个破折号。”

下一个屏幕快照演示了此简单的应用程序的实际操作。

如果未提供必需的参数,则会显示一条消息(包括堆栈跟踪),类似于下一个屏幕快照中所示。

我在此处不包括基于Commandline使用帮助或用法的示例,因为,正如该项目的GitHub页面所述,“生成帮助文本”是“当前不支持的功能”。

选择库以帮助进行Java中的命令行解析时,需要考虑以下Commandline的其他特征。

  • Commandline是开源的,并根据Apache License Version 2.0获得许可 。
  • 当前版本的Commandline( 1.7.0 )至少需要Java SE 7 。
  • commandline-1.7.0.jar大小约为38 KB,并且不依赖于任何其他库。

命令行是Java开发人员可以使用的大量开源命令行处理库中​​的另一个,并且与其他几个命令行库一样,命令行使用注释来完成大部分繁重的工作。

其他参考

  • GitHub上的命令行
  • Maven Central上的命令行

翻译自: https://www.javacodegeeks.com/2017/06/java-command-line-interfaces-part-4-commandline.html

java调用命令行命令

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

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

相关文章

java 字段为空设置默认值_java – 当字段为空时使用MyBatis添加默认值

当我的字段为空时,我想从数据库中插入默认值.我使用的是Oracle数据库.CREATE TABLE "EMPLOYEE"("COL1" VARCHAR2(800) NOT NULL ENABLE,"COL2" VARCHAR2(100) DEFAULT NOT NULL toto,CONSTRAINT "PK_EMPLOYEE" PRIMARY KEY ("COL…

JVM 内存示意图(内存结构图/内存解析图)

图 1&#xff1a; 图 2&#xff1a; 图 3&#xff1a; 图 4&#xff1a;

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

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

python36_第36 p,就这几个方法,Python中文件的操作

大家好&#xff0c;我是杨数Tos&#xff0c;这是《从零基础到大神》系列课程的第X篇文章&#xff0c;第二阶段的课程&#xff1a;Python基础知识&#xff1a;Python中文件的操作(下篇)。学习本课程&#xff0c;建议先看一遍&#xff1a;【计算机基础知识】课程。一、 绝对路径与…

java如何使用类数组_java – 如何使用泛型与数组的类?

我想创建一个Classes数组&#xff0c;每个都代表我正在构建的系统中可用的类型。所有涉及的类都是公共超类的子类。所以我想做&#xff1a;Class extends SuperClass>[] availableTypes { SubClass1.class, SubClass2.class };这给我错误&#xff1a;Cannot create a gener…

协议管理模块设计

文章目录协议和合同的区别协议表说明协议签署日志协议和合同的区别 如果协议的内容写得比较明确、具体、详细、齐全&#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;甚至下一次创建相同类型的工程时也不知道要配置哪…

tomee_微服务系列:MicroProfile和Apache TomEE

tomee介绍 MicroProfile是由知名供应商于2016年9月发起的一项计划&#xff0c;目的是基于JEE平台构建微服务架构。 任务是针对微服务架构优化企业Java 。 开发人员可以使用这种体系结构&#xff0c;通过Enterprise Java平台以标准化的方式构建和开发微服务应用程序。 API构建将…

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

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

python做数据库压力测试_Python 写的一个MongoDB压力测试

Python 写的一个MongoDB压力测试$ pip install pymongo#!/usr/bin/env python#codingutf-8#Author: Ca0Gu0from pymongo import MongoClientimport datetime,timeclass MongCli(object):def __init__(self, host"127.0.0.1", port27017, userpytest, passwd pytest12…

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;使用正确的工具进行编程都可以对项目的成功产生巨大的影响。 适当的工具使…

vue实现上下滑动翻页_基于vue实现上下滑动翻页效果

18年年底的时候&#xff0c;一直在做年度报告的H5页面&#xff0c;因为项目需要&#xff0c;需要实现上下滑动翻页&#xff0c;并且上滑的页面比正常页面的比例要缩小一定比例。效果类似于http://www.17sucai.com/pins/demo-show?id7834&#xff0c;这个链接是基于jquery实现的…

java bytebuffer 大小_java – 为什么DirectByteBuffer.array()有额外的大小?

我的代码是&#xff1a;if (frameRGBABuffer null) {frameRGBABuffer ByteBuffer.allocateDirect(cameraHeight * cameraWidth * 4).order(ByteOrder.nativeOrder());}Log.d("tag",frameRGBABuffer.array().length)我的相机分辨率是1280720,因此frameRGBABuffer应该…

关于登录 token 的设计

设计要点&#xff1a; APP 和 小程序 的登录 token 不需要时效性&#xff0c;PC端的登录 token 需要时效性token 中不要加入到期时间&#xff0c;因为每次有效请求&#xff0c;都要更新 token 的到期时间&#xff0c; 如果把到期时间加入到 token 中&#xff0c;那么每次请求就…

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

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

丢弃commit_git丢弃本地修改的所有文件(新增、删除、修改)

一&#xff0c;未使用 git add 缓存代码时。可以使用 git checkout -- filepathname (比如&#xff1a; git checkout -- readme.md &#xff0c;不要忘记中间的 “--” &#xff0c;不写就成了检出分支了&#xff01;&#xff01;)。放弃所有的文件修改可以使用 git checkout …

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

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