Как сохранить и загрузить историю между вызовами Scala JLine

Я использую Scala JLine в моей программе CLI. Он работает нормально, но забывает мою историю каждый раз, когда я перезапускаю программу. Я вижу класс с именем FileHistory, и я вижу, что класс ConsoleReader имеет метод с именем setHistory(), который принимает экземпляр FileHistory. Я ожидаю, что вызов этого метода приведет к созданию или загрузке и сохранению файла, содержащего мою историю. Но это не так.

К сожалению, документация почти отсутствует. Как я могу сделать так, чтобы при следующем запуске моей программы с поддержкой JLine она запоминала команды, которые я набрал в предыдущем запуске?

Обновлять

Правильный ответ, данный Мирандес ниже. Спасибо mirandes и som-snytt за их полезные (да, растворяющие) ответы.


person Adam Mackler    schedule 29.07.2013    source источник
comment
JLine на самом деле является отдельной библиотекой, Scala только встроила ее в свой дистрибутив.   -  person ghik    schedule 30.07.2013
comment
Мой флеш-ответ прибыл первым... Кстати.   -  person som-snytt    schedule 31.07.2013
comment
Твой ответ пришел первым к семи часам, сом-снит. Я согласен. Респект вам за скорость.   -  person Adam Mackler    schedule 01.08.2013


Ответы (2)


Это сработало для меня:

import scala.tools.jline.console.ConsoleReader
import scala.tools.jline.console.history.FileHistory
import java.io.File

val reader : ConsoleReader = new ConsoleReader() 

val history = new FileHistory(new File(".history"))
reader.setHistory(history) 

Перед выходом из приложения обязательно очистите историю.

reader.getHistory.asInstanceOf[FileHistory].flush()
person mirandes    schedule 31.07.2013
comment
И это сохранение файла с именем .history в том же каталоге, из которого вы запускаете программу? Делаете ли вы что-нибудь, чтобы сохранить файл перед выходом из вашей программы? Возможно, я неправильно закрываю свою программу. - person Adam Mackler; 31.07.2013
comment
Я отредактировал ответ, добавив в конце необходимый flush(). Он может сохраняться в текущем каталоге или по любому полному пути. - person mirandes; 31.07.2013
comment
Работает, спасибо!! Но есть одна вещь: по какой-то причине мне пришлось изменить new File(".history") на (new File(".history")).getAbsoluteFile. Я предполагаю, что это как-то связано с sbt. - person Adam Mackler; 31.07.2013

Есть комментарий. Я думал, вы сказали, что не было никакой документации?

/**
 * {@link History} using a file for persistent backing.
 * <p/>
 * Implementers should install shutdown hook to call {@link FileHistory#flush}
 * to save history to disk.
 *
 * @author <a href="mailto:[email protected]">Jason Dillon</a>
 * @since 2.0
 */
public class FileHistory

Сравните с Scala Внутренняя история REPL.

person som-snytt    schedule 31.07.2013
comment
Очевидно, мне нужно поработать над своими навыками поиска документации. Я не вижу этого ни в банке javadocs, которая поставляется с артефактом maven версии Scala, ни при просмотре документация по версии Java здесь. Теперь я вижу, что смотрел не ту версию. На сайте v2 здесь нет javadocs. Ах да, это прямо здесь . Как я это пропустил? Благодарю вас! - person Adam Mackler; 31.07.2013