Scala UTF-8方式读取属性文件,支持克隆

/** 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

    属性文件内容:

Scala UTF-8方式读取属性文件,支持克隆

结果:

Scala UTF-8方式读取属性文件,支持克隆


    

  

你可能感兴趣的:(scala,utf-8,克隆,读取属性文件)