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登錄界面命令
總結
以上是生活随笔為你收集整理的java登录界面命令_Java命令行界面(第29部分):自己动手的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑网页被百度转码(百度网页小说转码咋办
- 下一篇: rxjava 背压_背压加载文件– Rx