【问题标题】:How to update an open file which is modified in java?如何更新在java中修改的打开文件?
【发布时间】:2014-12-07 07:25:35
【问题描述】:

我正在开发一个 Speech to Text 项目,我应该在该项目中制作一个文本编辑器,在有人说话时输入。我所做的是当有人说话时,它会使用

附加到文件中
File file = new File("C:\\Users\\User\\Desktop\\voice_type_test.txt");
PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(file, true)));
writer.append("Text to be appended.");
writer.close();

问题说明:文件被修改完美,但它不会更新打开的窗口及其内容。这很明显!我想要一种方法,以便它也可以更新打开的 .txt 文件。因为每次添加新行时读取文件不是一个可行的选择!

示例

文件内容为:(在打开的文本编辑器和硬盘文件中)

ABCDEFGHIJKLMNO

修改后的文件内容:

(在硬盘上)

ABCDEFGHIJKLMNO 要附加的文本。

(在屏幕编辑器上)

ABCDEFGHIJKLMNO

[编辑]

更新: Screen-editor/Text Editor指的是任何文本编辑器,无论是记事本、写字板、Word、Eclipse的代码区等。

【问题讨论】:

  • 什么是屏幕编辑器?你的编辑?您需要创建一个简单的编辑器,或者您需要关闭并重新打开窗口
  • 你可以把它想象成一个记事本窗口。
  • @FastSnail 实际上它适用于任何文本编辑器...无论是记事本、写字板、eclipse 的代码区...
  • 这只有在编辑器支持检测底层文件的更改时才有效,所以可能是eclipse,但不是记事本和写字板...
  • 如果你在 jframe 中显示文本,这样你就不必担心更新文本编辑器了?或关闭/重新打开该文件。

标签: java file file-handling


【解决方案1】:

另一种解决方案。考虑使用 java.awt.Robot。这会将输入发送到具有焦点的当前窗口,因此应该可以处理任何事情。

Robot robot = new Robot();
Thread.sleep(1000);
String helloWorld = "Hello world";
for (char c : helloWorld.toCharArray()) {

    if (Character.isUpperCase(c)) {
        robot.keyPress(KeyEvent.VK_SHIFT);
    }
    robot.keyPress(Character.toUpperCase(c));
    robot.keyRelease(Character.toUpperCase(c));

    if (Character.isUpperCase(c)) {
        robot.keyRelease(KeyEvent.VK_SHIFT);
    }
}

【讨论】:

  • 这不会自动更新文本编辑器中的内容,这是我猜的主要要求。它只会让编辑器在屏幕前面对吗?
  • 你能解释一下for each循环里面发生了什么吗?
  • 目前无法满足更新任何编辑器(包括记事本等)的要求,因此只能提供替代方案。
  • @sidkamaria 它逐个字符地发送字符串,就像用户在键盘上键入一样。
猜你喜欢
  • 1970-01-01
  • 2021-09-08
  • 2010-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-02
  • 2010-09-05
  • 1970-01-01
相关资源
最近更新 更多