带有自己提示符的 Java 命令行应用程序

标签 java command-line-tool apache-commons-cli jline jline2

<分区>

我正在编写一个 JAVA 控制台应用程序。用户启动 jar 后,他应该得到一个类似于 Linux shell 的命令行,他可以在其中输入命令。这是我以前从未编程过的东西。通常我正在编写 GUI,或者我用一些已解析的参数启动 jar。

基本上我有 2 个问题:

  1. 是否有第三方库可以帮助从命令行读取用户输入、解析命令并生成提示?为了解析在主类中传递的参数,我通常使用 Apache Commons CLI。在这里也使用 full 还是有更好的方法?
  2. 是否有提供“无限输入”的最佳实践?我发现的所有解决方案都已有 10 年或更长时间了,例如:

    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    while(true){
        System.out.print("Enter String");
        String s = br.readLine();
    }
    

    这仍然是最佳实践还是现在有更好的方法?

最佳答案

我正在使用图书馆 jline2 ,也就是说,它很简单:

    InputStream inStream = new FileInputStream(FileDescriptor.in);
    ConsoleReader reader = new ConsoleReader("App", inStream, System.out, null);

    reader.setPrompt("> ");

    reader.addCompleter(new FileNameCompleter());
    reader.addCompleter(new StringsCompleter(Arrays.asList(new String[] {
            "cmd1",
            "exit",
            "quit",
    })));

    String line;
    PrintWriter out = new PrintWriter(reader.getOutput());

    while ((line = reader.readLine()) != null) {
        if (line.startsWith("cmd1")) {
            String[] cmd = line.split("\\s+");
            if(cmd.length < 2) {
                out.println("Invalid command");
                help(out);
            } else {
                ... do work
            }
        } else if (line.equalsIgnoreCase("quit") || line.equalsIgnoreCase("exit")) {
            break;
        } else {
            help(out);
        }
    }

    // ensure that all content is written to the screen at the end to make unit tests stable
    reader.flush();

关于带有自己提示符的 Java 命令行应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35952030/

相关文章:

java - 没有经验的 java 用户请求有关类的建议

c++ - g++ 编译器在终端中给出奇怪的错误

xcode - 如何部署 Mac 命令行工具

java - 有没有办法从 Apache commons-cli 选项值中自动去除前导空格?

java - jni native 函数重载签名

java - 用 Java 填充 HashMap

android 中的 Java 正则表达式

c# - 程序在真正完成之前关闭

Java apache cli 参数顺序

java - 如何保留帮助部分中的参数顺序?