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

    属性文件内容:

230641_BS7f_2360530.jpg

结果:

230641_zT5a_2360530.jpg


    

  

转载于:https://my.oschina.net/lidg/blog/412039

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值