/** Xiaohei's Devlopment Stdio */
package com.ldg.util
import java.util.concurrent.ConcurrentHashMap
import scala.io.Source
import com.typesafe.config.ConfigFactory
/**
* @author 李代崗
* @version 2015/05/04 22:23:41
*
* Scala UTF-8方式读取属性文件,支持克隆
*/
class PropertyHolder extends Cloneable{
private val props = new ConcurrentHashMap[String, String]()
//相对路径加载属性文件,UTF-8方式读取
def load(filePath:String):Unit={
Source.fromFile(this.getClass.getResource(filePath).getPath).getLines.filterNot(_.startsWith("#"))
.map(_.split("=")).foreach(setAsProps)
}
//加载至HashMap,只供内部用
private[this] def setAsProps[U](arr: Array[String]): Unit = {
arr.length match {
case 2 => set(arr(0),arr(1))
case _ => None
}
}
//加载,只供内部用
private[this] def set(key: String, value: String): Unit = {
if (key == null) {
throw new NullPointerException("null key")
}
if (value == null) {
throw new NullPointerException("null value for " + key)
}
props.put(key, value)
}
def getOption(key: String): Option[String] = {
Option(props.get(key))
}
def get(key: String): String = {
getOption(key).getOrElse(throw new NoSuchElementException(key))
}
def getInt(key: String, defaultValue: Int): Int = {
getOption(key).map(_.toInt).getOrElse(defaultValue)
}
def getLong(key: String, defaultValue: Long): Long = {
getOption(key).map(_.toLong).getOrElse(defaultValue)
}
def getDouble(key: String, defaultValue: Double): Double = {
getOption(key).map(_.toDouble).getOrElse(defaultValue)
}
def getBoolean(key: String, defaultValue: Boolean): Boolean = {
getOption(key).map(_.toBoolean).getOrElse(defaultValue)
}
def getAll: Array[(String, String)] = {
//asScala隐式转换用
import scala.collection.JavaConverters._
props.entrySet().asScala.map(x => (x.getKey, x.getValue)).toArray
}
def setAll(props: Traversable[(String, String)]) = {
//asScala隐式转换用
import scala.collection.JavaConverters._
this.props.putAll(props.toMap.asJava)
this
}
def contains(key: String): Boolean = props.containsKey(key)
//删除属性
def remove(key: String): Unit = {props.remove(key)}
override def clone: PropertyHolder = {
new PropertyHolder().setAll(getAll)
}
}
object PropertyHolder {
def main(args: Array[String]) = {
var propertyHolder = new PropertyHolder
propertyHolder.load("/fw_conf/ldgconf.properties")
println(propertyHolder get "name")
println(propertyHolder get "encoding")
println(propertyHolder contains "name")
propertyHolder remove "name"
println(propertyHolder contains "name")
}
}
测试:
属性文件位置:src\resource\fw_conf\ldgconf.properties
属性文件内容:
结果: