Java:我如何修改控制台输出?

3
我需要编写一个简单的基于终端的程序,它应该:
  1. 使用BufferedReader包装的FileReader从文件中读取一些文本。
  2. 将此文本打印到控制台,并且用户应该能够修改它。
  3. 在按下Enter + S时,程序应该读取修改后的文本并将其保存回原始文件。
总之,这个想法是为类Unix环境编写一个没有GUI的文本编辑器。
然而,我在步骤2和3遇到了问题。
  1. 所有被System.out打印出的文本都是不可变的。如何更改这种行为?
  2. 如何为Enter + S实现一个键盘监听器?我可以很容易地在GUI中完成,但在基于控制台的程序中,我需要添加一个监听器吗?当按下Enter时,程序应该将一个新行添加到修改后的文本中。另外,如何读取已经在终端上打印的文本?
P.S. 如果有任何相关的话,我必须使用JDK 1.4,因此无法访问Scanner和Console类。我也认为在Java中完成这样的任务是不可能的,因此您可以建议C/C++的解决方案。毕竟,在MS-DOS时代他们以某种方式做到了这一点。
谢谢!

所有由System.out打印的文本都是不可变的。我该如何改变这种行为?你是什么意思? - Jacob
他的意思是通常在打印出来后,你不能随便返回去更改它。 - Mike Kwan
@cularis 我的意思是一旦“Hello World”被打印出来,您就无法将其退格为“Hello”。 - ivt
人们总是出于某种原因而问这个问题:) 不,它实际上是一个旨在嵌入式系统中使用的真实程序,没有图形用户界面。 - ivt
3个回答

5
你需要的是类似于charva的东西。它是一个Java库,像24 x 80终端那个时代的termcap / termio / curses / ncurses库一样工作。
Charva(以及curses等)通过向终端或终端仿真器发送控制代码和/或转义序列来移动光标,编写和擦除字符等。在现代系统上,它们依赖于控制台提供的ANSI或VT100终端仿真...或类似的东西。

这很有趣...可能能够满足用户825089的目的。谢谢Stephen,我也觉得很有用。 - Sumit
谢谢,真的非常有帮助。我一定会去看看的。 - ivt

1

谢谢,我甚至不知道这些curses是什么。首先得了解一般的知识。 - ivt

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接