如何在Scala JLine的调用之间保存和加载历史记录

时间:2013-07-29 22:18:19

标签: scala jline

我在CLI程序中使用Scala JLine。它工作正常,但每次重新启动程序时都会忘记我的历史记录。我看到一个名为FileHistory的类,我看到ConsoleReader类有一个名为setHistory()的方法,它采用FileHistory的实例。我希望调用该方法会导致它创建或加载并保存包含我的历史记录的文件。但事实并非如此。

不幸的是,文档几乎不存在。如何在下次运行启用JLine的程序时记住我在上一次运行中键入的命令?

更新

以下由mirandes给出的正确答案。感谢mirandes和som-snytt,感谢他们提供了有用的(有帮助的)反应。

2 个答案:

答案 0 :(得分:5)

这对我有用:

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()

答案 1 :(得分:1)

有评论。我以为你说没有任何文件?

/**
 * {@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:jason@planet57.com">Jason Dillon</a>
 * @since 2.0
 */
public class FileHistory

Scala REPL internal history比较。