全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Java 操作Properties配置文件详解

1 简介:

JDK提供的java.util.Properties类继承自Hashtable类并且实现了Map接口,是使用一种键值对的形式来保存属性集,其中键和值都是字符串类型。

java.util.Properties类提供了getProperty()和setProperty()方法来操作属性文件,同时使用load()方法和store()方法加载和保存Properties配置文件。

java.util.ResourceBundle类也提供了读取Properties配置文件的方法,ResourceBundle是一个抽象类。

2.Properties中的主要方法

1)load(InputStream inStream):该方法可以从.properties属性文件对应的文件数入流中,加载属性列表到Properties类对象中。load有两个方法的重载:load(InputStream inStream)、load(Reader reader),可根据不同的方式来加载属性文件。

InputStream inStream = TestProperties.class.getClassLoader().getResourceAsStream("demo.properties"); 
//通过当前类加载器的getResourceAsStream方法获取
//TestProperties当前类名;TestProperties.class.取得当前对象所属的Class对象; getClassLoader():取得该Class对象的类装载器

InputStream in = ClassLoader.getSystemResourceAsStream("filePath");

InputStream inStream = new FileInputStream(new File("filePath")); //从文件获取
InputStream in = context.getResourceAsStream("filePath");     //在servlet中,可以通过context来获取InputStream
InputStream inStream = new URL("path").openStream();            //通过URL来获取

读取方法如下:

Properties pro = new Properties();                   //实例化一个Properties对象
InputStream inStream = new FileInputStream("demo.properties");     //获取属性文件的文件输入流
pro.load(nStream);
inStream.close();

 2)store(OutputStream out,String comments):这个方法将Properties类对象的属性列表写入.properties配置文件。如下:

FileOutputStream outStream = new FileOutputStream("demo.properties");
pro.store(outStream,"Comment");
outStream.close();

3 ResourceBundle中的主要方法

 通过ResourceBundle.getBundle()静态方法来获取,此方法获取properties属性文件不需要加.properties后缀名。也可以从InputStream中获取ResourceBundle对象。

ResourceBundle resource = ResourceBundle.getBundle("com/xiang/demo");//emo为属性文件名,放在包com.xiang下,如果是放在src下,直接用test即可 
ResourceBundle resource1 = new PropertyResourceBundle(inStream);  
String value = resource.getString("name"); 

在使用中遇到的问题可能是配置文件的路径,当配置文件不在当前类所在的包下,则需要使用包名限定;若属性文件在src根目录下,则直接使用demo.properties或demo即可。

4 Properties操作实例

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Properties;

/**
 * Java中Preperties配置文件工具类
 * @author shu
 *
 */
public class PropsUtil {
  private String path = "";
  private Properties properties ;
  
  /**
   * 默认构造函数
   */
  public PropsUtil() {}
  
  /**
   * 构造函数
   * @param path 传入Properties地址值
   */
  public PropsUtil(String path) {
    this.path = path;
  }
  
  /**
   * 加载properties文件
   * @return 返回读取到的properties对象
   */
  public Properties loadProps(){
    InputStream inStream = ClassLoader.getSystemResourceAsStream(path);    
    try {
      if(inStream==null)
        throw new FileNotFoundException(path + " file is not found");
      properties = new Properties();
      properties.load(inStream);
      inStream.close();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return properties;
  }
  
  /**
   * 将配置写入到文件
   */
  public void writeFile(){
    // 获取文件输出流
    try {
      FileOutputStream outputStream = new FileOutputStream( new File(ClassLoader.getSystemResource(path).toURI()));
      properties.store(outputStream, null);
      outputStream.close();
    } catch (Exception e) {
      // TODO Auto-generated catch block
      e.printStackTrace();
    }
  }
  
  /**
   * 通过关键字获取值
   * @param key
   * @return 返回对应的字符串,如果无,返回null
   */
  public String getValueByKey(String key) {
    if(properties==null)
      properties = loadProps();
    String val = properties.getProperty(key.trim());
    return val;
  }
  
  /**
   * 通过关键字获取值
   * @param key 需要获取的关键字
   * @param defaultValue 若找不到对应的关键字时返回的值
   * @return 返回找到的字符串
   */
  public String getValueByKey(String key,String defaultValue){
    if(properties==null)
      properties = loadProps();
    return properties.getProperty(key, defaultValue);
  }
  
  /**
   * 获取Properties所有的值
   * @return 返回Properties的键值对
   */
  public Map<String, String> getAllProperties() {
    if(properties==null)
      properties = loadProps();
    Map<String, String> map = new HashMap<String, String>();
    // 获取所有的键值
    Iterator<String> it=properties.stringPropertyNames().iterator();
    while(it.hasNext()){
      String key=it.next();
      map.put(key, properties.getProperty(key));
    }
    /*Enumeration enumeration = properties.propertyNames();
    while (enumeration.hasMoreElements()) {
      String key = (String) enumeration.nextElement();
      String value = getValueByKey(key);
      map.put(key, value);
    }*/
    return map;
  }

  /**
   * 往Properties写入新的键值且保存
   * @param key 对应的键
   * @param value 对应的值
   */
  public void addProperties(String key, String value) {
    if(properties==null)
      properties = loadProps();
    properties.setProperty(key, value);
    try {
      writeFile();
    } catch (Exception e) {
      throw new RuntimeException("write fail");
    }
  }
  
  /**
   * 更新配置文件
   * @param key 对应的键
   * @param value 对应的值
   */
   public void update(String key,String value){
     if(properties==null)
      properties = loadProps();
     if(properties.containsKey(key))
       properties.replace(key, value);
    try {
      writeFile();
    } catch (Exception e) {
      throw new RuntimeException("write fail");
    }
   }
   
   /**
   * 刪除某一鍵值对
   * @param key
   */
   public void deleteByKey(String key){
     if(properties==null)
      properties = loadProps();
     if(!properties.containsKey(key))
       throw new RuntimeException("not such key");
     properties.remove(key);
     try {
      writeFile();
     } catch (Exception e) {
      throw new RuntimeException("write fail");
    }
   }
   
   /**
   * 设置path值
   * @param path
   */
   public void setPath(String path){
     this.path = path;
   }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# java  # 操作properties  # properties  # 配置  # Java读取Properties文件几种方法总结  # 详解Spring加载Properties配置文件的四种方式  # Java中Properties类的操作实例详解  # Java中使用Properties配置文件的简单方法  # 基于Properties类操作.properties配置文件方法总结  # 配置文件  # 加载  # 键值  # 放在  # 方法来  # 都是  # 是一个  # 不需要  # 找不到  # 可以通过  # 要使  # 大家多多  # 方法如下  # 则需  # 象中  # 实现了  # 可根据  # 有两个  # 抽象类  # File 


相关文章: 如何通过智能用户系统一键生成高效建站方案?  黑客如何利用漏洞与弱口令入侵网站服务器?  如何选择高效稳定的ISP建站解决方案?  如何用VPS主机快速搭建个人网站?  b2c电商网站制作流程,b2c水平综合的电商平台?  相册网站制作软件,图片上的网址怎么复制?  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  家具网站制作软件,家具厂怎么跑业务?  青岛网站建设如何选择本地服务器?  如何制作一个表白网站视频,关于勇敢表白的小标题?  网站按钮制作软件,如何实现网页中按钮的自动点击?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?  南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  免费制作小说封面的网站有哪些,怎么接网站批量的封面单?  如何做网站制作流程,*游戏网站怎么搭建?  免费网站制作appp,免费制作app哪个平台好?  高端网站建设与定制开发一站式解决方案 中企动力  香港服务器建站指南:免备案优势与SEO优化技巧全解析  宝塔建站无法访问?如何排查配置与端口问题?  建站主机如何选?性能与价格怎样平衡?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  常州自助建站:操作简便模板丰富,企业个人快速搭建网站  C#如何在一个XML文件中查找并替换文本内容  高防服务器租用如何选择配置与防御等级?  建站主机系统SEO优化与智能配置核心关键词操作指南  如何通过NAT技术实现内网高效建站?  沈阳个人网站制作公司,哪个网站能考到沈阳事业编招聘的信息?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  高端智能建站公司优选:品牌定制与SEO优化一站式服务  山东网站制作公司有哪些,山东大源集团官网?  自助网站制作软件,个人如何自助建网站?  如何挑选优质建站一级代理提升网站排名?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  建站主机如何选?高性价比方案全解析  制作表格网站有哪些,线上表格怎么弄?  如何自定义建站之星网站的导航菜单样式?  如何在VPS电脑上快速搭建网站?  TestNG的testng.xml配置文件怎么写  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  ,网站推广常用方法?  如何设置并定期更换建站之星安全管理员密码?  如何在云主机快速搭建网站站点?  如何在阿里云香港服务器快速搭建网站?  如何快速查询网址的建站时间与历史轨迹?  武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?  如何正确下载安装西数主机建站助手?  如何基于PHP生成高效IDC网络公司建站源码?  北京建设网站制作公司,北京古代建筑博物馆预约官网? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。