宁夏小蚁人网站建设,黑龙江省建设教育网站查询,cms做的电影网站,做网站技巧java登录界面命令本系列有关从Java解析命令行参数的系列简要介绍了28个开源库#xff0c;这些库可用于处理Java代码中的命令行参数。 即使涵盖了这28个库#xff0c;该系列也没有涵盖用于解析Java命令行选项的所有可用开源库。 例如#xff0c;本系列文章未涉及docopt … 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.htmljava登录界面命令