2

我正在尝试从 java 中的控制台读取一行。这是我的代码:

System.console().readLine("shell $ ");

这行得通,但我想使用像箭头这样心爱的 linux 功能来移动光标(^[[C不像现在那样插入),向上箭头应该解决上一个命令,选项卡应该自动完成某些东西(这不是必需的,但很有用,我会对正确的箭头感到满意行为)。

而且——不,我想使用“纯 java”解决方案,而不是 libreadline 的 JNI 包装器。

JDK本身或某些提供此类功能的框架中是否有某些功能?

4

3 回答 3

2

java中没有这样的内置功能。为了能够做到这一点,即创建一个能够执行诸如循环以前的命令、使用箭头键移动等操作的控制台,需要为这些键编写一个动作处理程序,这在 java 中是不可能的(根据内置的功能),因为输入在java中被缓冲并且一旦你按下它就会被刷新Enter

您可能可以在 JNI 中执行此操作,即 Java Native Language。据我所知,您可以查看java console api,更多详细信息请参见此博客

于 2013-02-27T17:43:14.373 回答
2

我必须自己回应。

我没有找到真正纯 Java 库来处理它,但毫无疑问它可以为 *nix 编写(System.in 实际上没有缓冲)。

我正在使用 jline2 ( https://github.com/jline/jline2 ) https://github.com/jline/jline2now因为它很小并且只需要二进制添加来支持 Windows;我已经测试了它的 jars,它们无需在我发现的任何*nix 和 win32 操作系统上重新编译即可工作。

所以,答案是:这是可能的,但没有人写过这样的 100% 纯库。

于 2013-03-01T13:18:44.800 回答
-1

来自 vmoksha 的 Sunilkumkar

   public class ReadConsoleSystem {
    public static void main(String[] a``rgs) { 
System.out.println("Enter something here : "); 
try{
    BufferedReader bufferRead = new 
     BufferedReader(new      InputStreamReader(System.in));
    String s = bufferRead.readLine(); 
    System.out.println(s);
}
catch(IOException e)
{
    e.printStackTrace();
}

  }
于 2013-02-28T12:05:15.413 回答