可用List集合配合System.in/out实现轻量命令行文本编辑器:以ArrayList<String>按行存储文本,通过字节流读取并解析“add/ins/del/show/quit”等命令,执行增删改查操作,支持行号(从1起)交互与基础文件存取。

用 List 集合配合基础输入输出流(如 System.in 和 System.out)可以实现一个轻量、可交互的命令行文本编辑器。它不依赖 GUI 或高级 I/O 类(如 BufferedReader),核心是用 ArrayList<String> 存储行内容,再通过字节流读取用户输入并解析命令。
核心设计思路:行式存储 + 命令驱动
文本本质是多行字符串,List<String> 天然适合按行增删改查。命令行交互则靠循环读取用户输入(如 “add hello”、“del 2”、“save file.txt”),再解析执行对应操作。基础流(InputStream/OutputStream)足够支撑简单输入输出,无需缓冲或编码处理(默认系统编码即可)。
关键步骤与代码要点
1. 初始化 List 并封装编辑逻辑
用 ArrayList<String> 存储当前文档每行内容,提供基础方法:
-
addLine(String line):末尾追加一行 -
insertLine(int index, String line):在指定位置插入(注意索引校验) -
deleteLine(int index):删除第 index 行(从 1 开始计数更符合用户直觉) -
replaceLine(int index, String line):替换某行 -
printAll():遍历List输出所有行,带行号
2. 用 System.in 读取命令(基础字节流方式)
不用 Scanner 或 BufferedReader,直接用 System.in.read() 逐字节读取,手动拼接字符串(注意换行符识别:\n 或 \r\n)。示例片段:
StringBuilder cmd = new StringBuilder();
int b;
try {
while ((b = System.in.read()) != '\n' && b != '\r' && b != -1) {
if (b != '\r') cmd.append((char) b);
}
} catch (IOException e) {
System.err.println("读取输入失败");
}
String input = cmd.toString().trim();
实际中建议封装为 readLine() 工具方法,提升可读性。
3. 解析命令并调用 List 操作
对读入的字符串按空格分割,判断首词决定动作,后续参数转为整数或字符串使用:
-
"add 内容"→list.add(内容) -
"ins 3 新内容"→list.add(2, 新内容)(第 3 行即索引 2) -
"del 5"→list.remove(4)(检查索引是否越界) -
"show"→ 调用printAll() -
"quit"→ 退出主循环
4. 文件保存/加载(可选增强)
用 FileOutputStream 和 FileInputStream 实现存取。保存时遍历 List,每行写入后加 \n;加载时逐行读取(可用 readLine() 辅助,或继续用字节流+换行判断),添加到 List 中。
注意事项与避坑点
- 输入流读取时务必处理
IOException,并考虑 Ctrl+D(Unix)或 Ctrl+Z(Windows)导致的-1返回值 - 行号显示和命令中的行号建议统一为“从 1 开始”,避免用户混淆索引 0
- 删除或修改前必须校验索引范围:
if (index list.size()) - 中文等非 ASCII 字符在无指定编码时依赖系统默认编码,若需跨平台稳定,后续可升级为
InputStreamReader指定 UTF-8 - 命令解析不区分大小写更友好(如
"ADD"和"add"都生效)
运行效果示意
启动后提示 >,用户输入命令:
> add Hello World > add This is line 2 > ins 1 First! > show 1: First! 2: Hello World 3: This is line 2 > quit
整个过程完全基于 List 的内存操作和基础流的字符交互,结构清晰、易于调试和扩展。

















