如何为Scala应用程序提供基本配置?

Dav*_*ave 8 scala

我正在研究用Scala编写的小型GUI应用程序.用户将在GUI中设置一些设置,我希望它们在程序执行之间保持不变.基本上我想要一个scala.collections.mutable.Map,它会在修改后自动保存到文件中.

这似乎是一个常见的问题,但我一直无法找到轻量级的解决方案.这个问题通常如何解决?

ove*_*ink 9

我做了很多这个,我使用.properties文件(它在Java-land中是惯用的).不过,我的设计非常直观.如果您有嵌套的配置构造,您可能需要不同的格式,如YAML(如果人类是主要作者)或JSON或XML(如果机器是作者).

下面是一些加载道具的示例代码,操作为Scala Map,然后再次保存为.properties:

import java.io._
import java.util._
import scala.collection.JavaConverters._

val f = new File("test.properties")
// test.properties:
//   foo=bar
//   baz=123

val props = new Properties

// Note: in real code make sure all these streams are 
// closed carefully in try/finally
val fis = new InputStreamReader(new FileInputStream(f), "UTF-8")
props.load(fis)
fis.close()

println(props) // {baz=123, foo=bar}

val map = props.asScala // Get to Scala Map via JavaConverters
map("foo") = "42"
map("quux") = "newvalue"

println(map)   // Map(baz -> 123, quux -> newvalue, foo -> 42)
println(props) // {baz=123, quux=newvalue, foo=42}

val fos = new OutputStreamWriter(new FileOutputStream(f), "UTF-8")
props.store(fos, "")
fos.close()
Run Code Online (Sandbox Code Playgroud)