Java 自动保存文本文件的有效方法

Java Efficient Ways to auto-save text files

我正在尝试创建具有 "Auto-Save" 功能的文本编辑器。这意味着每当用户对当前文本进行任何更改(例如,添加或删除字母、单词、行等)时,该更改也应立即应用于文本文件。

我使用 Javafx 的 "TextArea" 控件来检测文本中的任何更改。此外,每当检测到更改时,我都会使用 BufferedWriter 从头开始​​将新文本写入文件。 然而,这对我来说似乎不正确,因为 BufferedWriter 将不得不从头开始重写所有文本。如果文本太大,这将导致性能问题。

有没有人对如何实现这个有更好的想法?提前致谢。

如果有人在文件开头附近插入或删除,那么无论如何都必须重写大部分文件。

所以你的策略必须是如何让自动保存看起来毫不费力。为此,您可能希望将输出写入线程上的备份文件,并且仅当安全写入该备份时,才将其移至先前的备份之上。显然,您只能在第一个备份完成后才能开始记录下一个备份,因此您不能以这种方式记录所有更改。

另一种策略是将更改写成日志,当用户选择恢复时可以重新应用这些更改。每隔一段时间你就可以写一个新的完整备份,然后重置日志。该日志可能与您用于 undo/redo 的数据相同。

诀窍是使用计时器,只有在文档被修改时才写入更新。

给出的示例适用于 Swing 组件,但可以适用于其他框架

boolean dirtyFlag = false; // set true if the document is altered
DocumentListener dl = new DocumentListener() { ... // implement all methods and set dirtyFlag = true in each
TimerTask task = new TimerTask() {
  public void run() {
    //save the file
  }
}
Timer t = new Timer();
t.scheduleAtFixeRate(task, ..., ...);