Java Эффективные способы автоматического сохранения текстовых файлов - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь создать текстовый редактор с функцией «Автосохранение». Это означает, что всякий раз, когда пользователь вносит какие-либо изменения в текущий текст (например, добавляет или удаляет буквы, слова, строки и т. Д. c), это изменение следует немедленно применить и к текстовому файлу.

I используйте элемент управления «TextArea» из Javafx для обнаружения любых изменений в тексте. Кроме того, я использую BufferedWriter для записи нового текста в файл с нуля, когда обнаруживается изменение. Однако это не кажется мне правильным, потому что BufferedWriter придется переписать весь текст с нуля. Это приведет к проблемам с производительностью, если текст будет слишком большим.

У кого-нибудь есть лучшее представление о том, как это реализовать? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 03 марта 2020

Хитрость заключается в том, чтобы использовать таймер и записывать обновление, только если документ был изменен.

Приведенный пример работает с компонентами 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, ..., ...);
1 голос
/ 03 марта 2020

Если кто-то вставляет или удаляет в начале файла, то большую часть файла все равно придется переписывать.

Таким образом, ваша стратегия должна заключаться в том, чтобы сделать автосохранение простым. Для этого вы, вероятно, захотите записать вывод в файл резервной копии в потоке, и только тогда, когда эта резервная копия записана безопасно, переместите ее поверх предыдущей резервной копии. Ясно, что вы можете начать запись следующей резервной копии только после завершения первой, поэтому вы не можете записывать каждое изменение таким образом.

Другая стратегия заключается в том, чтобы записать журнал изменений, и они могут быть повторно записаны. применяется, когда пользователь выбирает восстановление. Время от времени вы можете написать новую полную резервную копию, а затем сбросить журнал. Вероятно, в этом журнале будут те же данные, что и для отмены / повтора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...