You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java控制台实现类Bash的向上箭头命令历史功能

Java实现Bash风格的命令历史与上下键调取功能

这个需求完全可行,JLine就是专门解决这类终端交互问题的标准库,你之前没成功应该是没用到正确的API用法。下面是完整的实现方案:

1. 引入JLine依赖

如果用Maven,在pom.xml中添加:

<dependency>
    <groupId>org.jline</groupId>
    <artifactId>jline</artifactId>
    <version>3.24.1</version> <!-- 可替换为最新稳定版 -->
</dependency>

Gradle用户则添加到build.gradle:

implementation 'org.jline:jline:3.24.1'

2. 完整实现代码

import org.jline.reader.EndOfFileException;
import org.jline.reader.LineReader;
import org.jline.reader.LineReaderBuilder;
import org.jline.reader.UserInterruptException;
import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import java.io.IOException;

public class CommandLineWithHistory {
    public static void main(String[] args) {
        try (Terminal terminal = TerminalBuilder.builder().system(true).build()) {
            // 构建LineReader替代Scanner,处理带历史的终端输入
            LineReader reader = LineReaderBuilder.builder()
                    .terminal(terminal)
                    .historyFile(java.nio.file.Paths.get(System.getProperty("user.home"), ".cmd_history"))
                    .build();

            String prompt = ">> ";
            while (true) {
                try {
                    // 读取带历史功能的输入
                    String line = reader.readLine(prompt);
                    if (line == null || line.equalsIgnoreCase("exit")) {
                        break;
                    }
                    // 这里替换为你的命令处理逻辑
                    System.out.println("执行命令: " + line);
                } catch (UserInterruptException e) {
                    // 处理Ctrl+C中断
                    break;
                } catch (EndOfFileException e) {
                    // 处理Ctrl+D结束输入
                    break;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 功能说明

  • 上下箭头默认支持调取历史命令,和bash行为完全一致:按上箭头依次回溯之前的命令,下箭头回到当前输入或后续历史
  • 调取历史命令后可直接修改内容,回车即可提交修改后的命令
  • 历史命令会自动保存到用户主目录下的.cmd_history文件,下次启动程序可复用历史记录
  • 终端自动处理ANSI控制码,不会出现^[[A这类乱码输出

内容的提问来源于stack exchange,提问作者Norbiros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 17:42:38