一、jline簡介
jline是Java語言的一款免費開源庫,包含了各種與命令行交互有關的功能,例如命令行提示、輸入歷史記錄以及光標移動等基本功能。使用jline可以讓Java應用程序在命令行下擁有更加友好的用戶體驗,同時降低了命令行交互相關功能開發的難度和複雜度。
二、jline的安裝與搭建
在Maven中加入JLine 3依賴:
<dependency> <groupId>org.jline</groupId> <artifactId>jline</artifactId> <version>3.16.0</version> </dependency>
jline的基礎功能可以通過創建一個默認的Terminal對象來啟動:
Terminal terminal = TerminalBuilder.builder().build(); terminal.writer().println("Hello JLine"); terminal.flush();
三、命令行提示
jline可以根據用戶輸入提供控制台自動補全的算法,如與簡潔清晰的命令補全、單詞/路徑補全等。通過接口Completer實現一些簡單的提示算法:
Completer completer = new SimpleCompleter("foo", "bar", "baz"); LineReader reader = LineReaderBuilder.builder() .completer(completer) .build(); reader.readLine(); // 這裡會自動提示以上三個單詞之一
四、命令歷史紀錄
命令歷史紀錄可以讓用戶在命令行中回溯之前執行過的命令。通過使用History對象,可以輕鬆地將歷史記錄添加到命令行中:
History history = new DefaultHistory(); LineReader reader = LineReaderBuilder.builder() .history(history) .build(); while (true) { String line = reader.readLine(); if (line.equals("quit")) { break; } // 執行輸入的命令 history.add(line); }
五、鍵盤綁定和快捷鍵
jline實現了各種鍵盤綁定的功能,這可以是你在命令行中使用快捷鍵和執行命令時變得更加流暢和方便。使用KeyMap和KeyStroke等類,達到對終端操作快捷鍵的綁定效果,示例代碼如下:
KeyMap<Runnable> keyMap = new KeyMap<>(); // 添加命令行運行過程中的鍵綁定事件 keyMap.bind(new Reference("beginning-of-line"), KeyStroke.ctrl('A'), cursor(0)); keyMap.bind(new Reference("end-of-line"), KeyStroke.ctrl('E'), cursorEnd()); keyMap.bind(new Reference("backward-char"), KeyStroke.ctrl('B'), backwardChar(1)); keyMap.bind(new Reference("forward-char"), KeyStroke.ctrl('F'), forwardChar(1)); // 將keyMap關聯到LineReader對象上 LineReader reader = LineReaderBuilder.builder() .terminal(terminal) .history(history) .keyMaps(keyMap) .build();
六、光標
在命令行下,光標通常是一個熟悉的符號,用作指示用戶正在輸入或編輯的位置。jline為此提供了一系列有用的API,如典型的光標移動、光標定位和文本上下文解析。以下代碼展示了如何使用jline庫支持控制台中的標準光標移動操作:
LineReader reader = LineReaderBuilder.builder().build(); reader.readLine(); // 等待用戶輸入 // 將光標移動到行首(相當於按下Home鍵) reader.getCursorBuffer().cursor = 0; // 將光標向左移動5個位置 reader.getCursorBuffer().move(-5);
以上是jline的基礎使用和相關方面的描述,jline更適合於命令行交互相關功能開發,我在自己的工作中,常常使用該庫來實現命令行操作,獲得了很好的使用體驗。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/200158.html