java登录界面命令_Java命令行界面(第29部分):自己动手

java登录界面命令

本系列有关从Java解析命令行参数的系列简要介绍了28个开源库,这些库可用于处理Java代码中的命令行参数。 即使涵盖了这28个库,该系列也没有涵盖用于解析Java命令行选项的所有可用开源库。 例如,本系列文章未涉及docopt , dolphin getopt , DPML CLI ,“其他” JArgP , java-getopt , ritopt , TE-CODE Command以及可能很多我不知道的其他库。 这篇文章着眼于人们在尝试决定是否用Java滚动自己的命令行参数解析代码与使用现有的众多命令行解析库之一时可能要考虑的因素。

乍一看,很容易说某人用Java开发自己的命令行解析代码可能会遭受“ Not Invented Here Syndrome”的困扰。 但是,我仍然偶尔会编写自己的简单命令行处理代码,并概述执行此操作的情况。

本系列涵盖的许多库都很小。 但是,对于命令行解析非常简单的情况,即使这些较小的库也可能比手头工作需要的库重。 我在本文中显示的示例就是可能适合此类的类型。 开发人员开发自定义命令行处理代码的可能性可能会随着所需命令行解析的复杂性增加以及向自己的部署环境引入新库的难度降低而增加。 过程也可能影响决策,因为某些开发人员可能选择实施自己的命令行处理代码,而不是等待使用所标识库的必要批准。

对于Java不选择使用命令行解析库的最简单情况显然是那些不需要命令行参数的情况。 实际上,由于许多人使用Web服务器,应用程序服务器或其他容器(例如Spring)来运行他们不考虑命令行的程序,因此可能有更多的Java开发人员从未或很少使用命令行选项。对其应用进行解析。 即使是一些简单的基于命令行的应用程序也可以假定值或从假定的位置读取值,而无需将参数传递给它们。

如果我只有一个参数要从命令行读取,我将自己编写该简单代码。 Java教程的“ 命令行参数”部分介绍了Java中命令行参数的基本处理。 通过经典的“ public static void main ”函数的String[]String...参数向Java应用程序提供Java可执行应用程序名称后的命令行中的零至许多字符串。 下面的简单代码清单指示了如何处理单个预期的命令行参数。

解析单个必需参数

/*** Demonstrate processing a single provided argument.** @param arguments Command-line arguments; expecting a*    String-based name.*/
public static void main(final String[] arguments)
{if (arguments.length < 1){out.println("\nNo name provided; please provide a name.\n");out.println("\tUSAGE: SingleArgMain <name>");}else{out.println("Hello " + arguments[0] + "!");}
}

上面的代码很容易编写,因为只有一个命令行选项,它没有自变量,因此它是必需的。 有了所有这些假设,编写命令行解析代码相对容易。

如果应用程序需要两个参数,则无需第三方库就可以直接在Java中直接处理此参数。 在下面的代码清单中对此进行了演示,该清单模拟了一个应用程序,该应用程序接受要验证的XML文件的名称/路径以及要对该XML进行验证的XSD的名称/路径。

解析两个必需的参数

/*** Demonstrate processing two required provided arguments.** @param arguments Command-line arguments; expecting a String-based*    path and file name of an XML file to be validated and a*    String-based path and file name of the XSD file against which*    the XML file will be validated.*/
public static void main(final String...arguments)
{if (arguments.length < 2){out.println("\nXML file path/name and XSD file path/name not provided.\n");out.println("\tUSAGE: TwoArgsMain <xmlFilePathAndName> <xsdFilePathAndName>");}else{out.println("The provided XML file is '" + arguments[0]+ "' and the provided XSD file is '" + arguments[1] + "'.");}
}

在本系列的文章中 ,我使用了一些示例,这些示例期望一个指定文件路径/名称的必需选项和一个表示启用的详细程度的可选选项。 在所有这些示例中,文件路径/名称选项是标志名称( -f和/或--file ),后跟该选项的“参数”或“值”。 对于这些示例,verbosity选项没有与之关联的参数或值,并且-v--verbose隐含启用的冗长性。 如果我愿意稍稍更改方法并假设第一个命令行选项是文件路径/名称,并假设详细程度标志(如果提供)出现在Java库之后,那么在没有库的Java中完成目录特别容易。文件路径/名称。 另一个使之容易实现的假设是假设由于文件路径/名称是第一个,因此我实际上不需要使用-file-f类的标志。 有了所有这些假设后,下面显示代码示例。

系列示例:解析一个必需的选项和一个可选的选项

/*** Demonstrate parsing of command-line options for required file* path/name and for optional verbosity.** @param arguments Expected command-line arguments; first String*    should be file path/name and, if applicable, second String*    should be the verbosity flag (-v or --verbose).*/
public static void main(final String[] arguments)
{if (arguments.length < 1){out.println("\nNo file path/name provided; please provide a file path/name.\n");out.println("\tUSAGE: SeriesExample <filePathAndName> [-v|--verbose]");}else{final String file = arguments[0];final String verboseString = arguments.length > 1 ? arguments[1] : "";final boolean verbose = verboseString.equals("-v") || verboseString.equals("--verbose");out.println("File path/name is '" + file + "' and verbosity is " + verbose);}
}

到目前为止,由于这些示例的这些特征,我具有相对简单的命令行解析选项:

  • 假定命令行参数的顺序不可更改。
  • 从来没有一个以上的可选命令行参数,而最后一个可选参数是预期的。
  • 永远不需要包含标志和与该标志关联的值的命令行参数。
  • 没有选项依赖于任何其他选项。

刚刚提到的特性使从Java解析命令行选项更加容易,因为通过要求选项的顺序,不允许带有必须一起处理的带有关联值的标志,显着减少了要准备的排列和组合的数量(所提供的String[]中的每个字符串都独立于该数组中的所有其他字符串),并且最多只允许一个可选参数(并要求其为最后一个)。

随着命令行参数情况变得越来越复杂,我对使用第三方库的渴望也越来越高。 如果我想拥有多个可选参数,或者想要具有包含带有相关值的标志的选项,那么我更有可能跳到第三方库来解析Java中的命令行参数。 使用本系列中涵盖的大多数第三方库,无需我担心选项排序和选项名称/标志关联。

可能需要在Java中滚动自己的命令行解析代码的一种情况是,当这些解析需求高度特定于现有库无法很好地处理的特定情况时,或者当现有库中的任何一个都无法充分满足其需求时需要。 但是,如果有30多个库可用,我怀疑对于大多数人来说这种情况会经常发生。

在用Java开发自己的命令行解析代码时,除了从头编写代码之外,其他选择还包括派生和扩展一个开源库,或者在诸如“ 使用Java解析命令行参数 ”一文中介绍的框架上构建自己的代码。 :使用有效的Java框架编写命令行工具”(《 Java开发者杂志 》第20和22页)。

对于基于Java的小型工具,本文中显示的简单命令行解析方法通常就足够了,尤其是当我是唯一可能使用该工具的工具时。 但是,随着Java应用程序潜在用户群的增加,本文中概述的要求可能会变得繁重,并且使用本系列文章中涵盖的第三方库可能有助于创建更加用户友好的命令行参数经验。 对于最简单的基于Java的工具和应用程序,我也许可以摆脱自己的自制命令行解析代码。 但是,对于大多数重要的Java应用程序来说,第三方库会更有意义,因为它为最终用户提供了更大的灵活性和易用性。

其他参考

  • Java教程:命令行参数
  • ParseCmdLine.java
  • 如何在Java中解析命令行参数?
  • 解析Java命令行程序的参数
  • Java中的命令行参数示例 (JavaTutoring.com)
  • Java中的命令行参数 (TutorialsPoint示例)
  • Java命令行参数解析器
  • 命令行参数 (Java基础)
  • Java中的命令行参数解析 (Wikipedia)
  • 使用Java解析命令行参数 :使用有效的Java框架编写命令行工具( PDF )

翻译自: https://www.javacodegeeks.com/2017/10/java-command-line-interfaces-part-29.html

java登录界面命令

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

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

相关文章

log nginx 客户端请求大小_nginx

博主会将与Nginx有关的知识点总结到"nginx短篇系列"文章中&#xff0c;如果你对nginx不是特别了解&#xff0c;请按照顺序阅读"nginx短篇系列"&#xff0c;以便站在前文的基础上理解新的知识点。当我们访问nginx服务时&#xff0c;nginx会记录日志&#xf…

Linux 下如何查询 tomcat 的安装目录

在命令终端输入如下命令&#xff1a; [roothtlwk0001host ~]# sudo find / -name *tomcat*

rxjava 背压_背压加载文件– RxJava常见问题解答

rxjava 背压事实证明&#xff0c;将文件作为流进行处理非常有效且方便。 许多人似乎忘记了&#xff0c;自Java 8&#xff08;3年以上&#xff01;&#xff09;以来&#xff0c;我们可以很容易地将任何文件变成一行代码&#xff1a; String filePath "foobar.txt"; …

linux 卸载nfs device is busy,umount.nfs: device is busy解决办法

&period;NET Core全新的配置管理&lbrack;共9篇&rsqb;提到“配置”二字,我想绝大部分.NET开发人员脑海中会立马浮现出两个特殊文件的身影,那就是我们再熟悉不过的app.config和web.config,多年以来我们已经习惯了将结构化的配置信息定义在这两 ...Windows无法安装到G…

php 时间加法函数_php 时间加减

date_default_timezone_set(PRC); //默认时区echo"今天:",date("Y-m-d",time()),"";echo "今天:",date("Y-m-d",strtotime("18 june2008")),"";echo "昨天:",date("Y-m-d",strtoti…

如何用xapmm测试php_如何在Xampp中运行PHP程序?

成为经过认证的专业PHP是最流行的web后端编程语言。PHP代码将作为web服务器模块或命令行界面运行。要运行PHP for the web&#xff0c;您需要安装像Apache这样的web服务器&#xff0c;还需要像MyS成为经过认证的专业PHP是最流行的web后端编程语言。PHP代码将作为web服务器模块或…

中文标点符号大全

文章目录常见的中文标点符号标点符号的位置中文的标点符号包括句号&#xff0c;逗号&#xff0c;感叹号&#xff0c;问号&#xff0c;引号&#xff0c;冒号等等&#xff0c;接下来分享常见的中文标点符号名称。常见的中文标点符号 句号 。 用于句子末尾&#xff0c;表示陈述语气…

linux 查看链接最终目标,linux学习笔记7-链接

hard link and soft link硬链接&#xff1a;一个文件两个不同的进入&#xff0c;相当于一个教室两个门&#xff0c;从哪个门进都进到同一个教室硬链接特征&#xff1a;1、拥有相同的 i节点 和相同的存储block快&#xff0c;可以看做是同一个文件2、可通过i节点识别&#xff0c;…

apache.camel_Apache Camel 2.20发布–新增功能

apache.camelApache Camel 2.20已于今天发布&#xff0c;并且像往常一样&#xff0c;我受命撰写有关此出色新版本及其亮点的博客。 该版本具有以下重点。 1&#xff09;Java 9技术预览支持 我们已经开始支持Java 9的工作&#xff0c;此版本称为技术预览。 源代码在Java 9上…

操作无法完成(错误 0x000006ba),Windows 11 PDF打印机无法使用解决办法

操作无法完成(错误 0x000006ba)&#xff0c;Windows 11 PDF打印机无法使用解决办法 解决方式一 先重启一次电脑&#xff0c;看看是否可以解决问题。 解决方式二 重新启动 Printer Spooler 服务

java 头像 微信群_java怎么生成带用户微信头像的图片,并把这张图片发送给用户。...

展开全部这个是要一个图片中嵌套另外一张图片你可以62616964757a686964616fe59b9ee7ad9431333431336163试试下面这段代码import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOE…

MyEclipse 的 TCP/IP Monitor 的使用

文章目录步骤 1&#xff1a;新建 web02 工程步骤 2&#xff1a;在 WebRoot 下创建 add_employee.html步骤 3&#xff1a;部署项目步骤 4&#xff1a;启动服务器步骤 5&#xff1a;打开 TCP/IP Monitor步骤 6&#xff1a;增加新的监视器步骤 7&#xff1a;启动监视器步骤 8&…

ubuntu linux mac地址,Ubuntu下修改mac地址

说明&#xff0c;本文翻译自man macchanger&#xff0c;若遇到不能理解的地方请参考man文档概述macchanger是linux下用于查看和修改网络接口mac地址的工具使用方法macchanger [options] device选项-e, --ending不要修改vendor-a, --another设置为一个同类型的MAC&#xff0c;同…

openwrt固定速率_固定速率与固定延迟– RxJava常见问题解答

openwrt固定速率如果您使用的是纯Java&#xff0c;从版本5开始&#xff0c;我们有一个方便的调度程序类&#xff0c;该类允许以固定速率或固定延迟运行任务&#xff1a; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService;Schedu…

如何处理表单中的中文(中文编码/解码问题)

浏览器会如何对表单中的数据进行编码? 当表单采用 post 方式提交时&#xff0c;浏览器会按照打开该表单所在的页面的编码来对表单中的数据进行编码。 在 html 文件当中设置字符编码集&#xff08;即字符编码格式&#xff09; <meta http-equiv"content-type" …

linux 进城 管道丢数据,linux – 使用命名管道与bash – 数据丢失的问题

有人在线搜索,发现简单的“教程”使用命名管道.但是,当我做任何后台工作时,我似乎失去了大量的数据.[[编辑&#xff1a;找到一个更简单的解决方案,看到回复帖子.所以我提出的问题现在是学术性的 – 万一有人想要一个工作服务器]]使用Ubuntu 10.04与Linux 2.6.32-25-generic#45-…

wso2 安装_WSO2注册表安装简介

wso2 安装这篇文章基于有关注册表安装及其工作原理等常见问题。以下是人们提出的主要问题&#xff1a; 1&#xff09;。 安装如何工作&#xff1f; 2&#xff09;。 Config Registry和Governance Registry有什么区别&#xff1f; 3&#xff09;。 可以将H2以外的数据库用于本…

Servlet配置错误处理页面/配置错误页面

写一个错误处理页面 error.html <html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"> <title>Insert title here</title> </head> <body style"font-size:30px;color:red;&quo…

azdb文件怎么打开_AZDBExplorerSvcs.dll

我该如何安装从金山毒霸下载的DLL文件&#xff1f;一&#xff1a;1、从金山毒霸下载压缩文件。2、将DLL文件解压到电脑上的某个地方。3、把该文件跟要求使用它的程序放在同一路径上。注意32位程序需要使用32位的DLL文件&#xff0c;64位程序需要使用64位的DLL文件。否则会出现0…

linux添加windows网络打印机,Linux Mint如何添加windows分享的网络打印机?

1.安装sambasudo apt-get install samba2.找到系统打印机选项通过 Menu-->>控制中心-->>系统管理找到 Printers选项&#xff0c;双击打开。3.核对windows打印机名并添加在如上图的画面中&#xff0c;点击 “Network Printer”&#xff0c;再点击“windows Printer …