java命令行程序交互也可以很nice

java命令行程序交互也可以很nice

如何nice

linux和mac下很多命令行程序都可以参数快捷呼出和补全,可以方向键任意切换输入过的命令, 用起来就非常方便和nice,
比如mycli(python实现的mysql客户端)。

分享

我一直也想用自己熟悉的java也实现类似命令行交互的命令行程序
请看下图:
在这里插入图片描述

实现

核心的实现是采用的jar包->jline.

添加依赖

通过maven依赖:

<dependency><groupId>jlinegroupId><artifactId>jlineartifactId><version>2.9version>
dependency>

代码

原来的代码关联太多,做了一个简化版本当example,

关键代码:

List<Completer> completors = new LinkedList<Completer>();
//参数需要快捷呼出,需要在这里配置。
completors.add(new StringsCompleter(new String[] { "help", "head","foreach","dict","hidden" }));
reader.addCompleter(new ArgumentCompleter(completors));

具体example:

import jline.console.ConsoleReader;
import jline.console.completer.ArgumentCompleter;
import jline.console.completer.Completer;
import jline.console.completer.StringsCompleter;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.util.LinkedList;
import java.util.List;public class Example {public static ConsoleReader reader;private static String PRE="[yuConsole]>";public static void main(String[] args) {try {reader = new ConsoleReader();reader.setBellEnabled(false);List<Completer> completors = new LinkedList<Completer>();//参数需要快捷呼出,需要在这里配置。completors.add(new StringsCompleter(new String[] { "help", "head","foreach","dict","hidden" }));reader.addCompleter(new ArgumentCompleter(completors));PrintWriter out = new PrintWriter(System.out);ConsolePrint.clear(out);Example example = new Example();String command;while ((command = reader.readLine(PRE)) != null) {if("exit".equals(command)){break;}out.println(example.doAction(command));out.flush();}out.println("yu's console say ByeBye!!!");out.close();System.exit(0);} catch (Exception e) {e.printStackTrace();}}public String doAction(String input) {input=input.trim();try{String[] infos = input.split(" ");Method m = this.getClass().getMethod(infos[0],String.class);return (String) m.invoke(this,infos.length==1?"-":infos[1]);}catch(Exception ex){return "输入有误->"+help(input);}}public String head(String input){StringBuffer str = new StringBuffer();str.append("head样式头");return str.toString();}public String help(String input){StringBuffer str = new StringBuffer();str.append("help hsml例子");str.append("head hsml样式头");str.append("dict 获取字典表值");str.append("hidden 隐藏");str.append("foreach 循环");return str.toString();}public String dict(String input){StringBuffer str = new StringBuffer();str.append("dict 字典值");return str.toString();}public String hidden(String input){StringBuffer str = new StringBuffer();str.append("hidden 隐藏值");return str.toString();}public String foreach(String input){StringBuffer str = new StringBuffer();str.append("foreach 循环");return str.toString();}
}

最后

最后希望大家喜欢,享受编程带来的乐趣。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部