zoukankan      html  css  js  c++  java
  • Spring 如何读取properties文件内容

    http://hi.baidu.com/alizv/blog/item/d8cb2af4094662dbf3d38539.html

    在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据我工作中用到的读取properties配置文件的方法小小总结一下,主要叙述的是spring读取配置文件的方法。
       用spring读取配置文件,最典型的就是关于数据库的连接,下面就是一个例子:
       文件jdbc.properties:
    -------------------------------------------------------------------------------------
           driverClassName com.MySQL.jdbc.Driver
           url jdbc:mysql://localhost:3306/test
           username root
           password 1234
    ------------------------------------------------------------------------------------
    引入spring的相关jar包,在applicationContext.xml中配置:
    -------------------------------------------------------------------------------------
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

    <beans>
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
               <value>src/jdbc.properties</value>
    </property>
    </bean>

    <bean id="datasource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <property name="driverClassName">
        <value>${driverClassName}</value>
    </property>
    <property name="url">
        <value>${url}</value>
    </property>
    <property name="username">
       <value>${username}</value>
    </property>
    <property name="password">
        <value>${password}</value>
    </property>
    </bean>

    <bean id="dao" class="com.zh.model.DataDAO">
       <property name="datasource">
         <ref local="datasource"/>
       </property>
    </bean>

    </beans>
    -----------------------------------------------------------------------------------------
    DataDAO.Java

    package com.zh.model;

    import javax.sql.DataSource;

    public class DataDAO {
    private DataSource datasource;

    public DataSource getDatasource() {
    return datasource;
    }

    public void setDatasource(DataSource datasource) {
    this.datasource = datasource;
    }

    }
    ------------------------------------------------------------------------------------
    测试连接是否成功,test.java
    package com.zh.logic;

    import java.sql.Connection;

    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.FileSystemXmlApplicationContext;

    import com.zh.model.DataDAO;

    public class test {
    public static void main(String [] args){
       try{
       String[] path = {"src/applicationContext.xml"};
       ApplicationContext ctx = new FileSystemXmlApplicationContext(path);

       DataDAO dao = (DataDAO)ctx.getBean("dao");
       Connection con = dao.getDatasource().getConnection();
       System.out.println(con.isClosed());
       //System.out.print(dao.getName());
       }catch(Exception ex){
       ex.printStackTrace();
         }
       }
    }
    -------------------------------------------------------------------------------------
    2.用java.util.Properties这个类来读取
    比如,我们构造一个ipConfig.properties来保存服务器ip地址和端口,如:
    ip=192.168.0.1
    port=8080
    --------------------------------------------------------------------------------------
    则,我们可以用如下程序来获得服务器配置信息:
    InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("ipConfig.properties");
       Properties p = new Properties();
       try{
           p.load(inputStream);
       } catch (IOException e1){
        e1.printStackTrace();
       }
    System.out.println("ip:"+p.getProperty("ip")+",port:"+p.getProperty("port"));
    --------------------------------------------------------------------------------------
    上面介绍了读取properties的内容,现实中我们还有可能要修改文件的内容,下面就看下怎么修改properties的内容,文件还是上面那个:
    package com.zh.logic;

    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.util.Properties;

    public class TestRead {
        
    public void read(){
       try {
        InputStream in = this.getClass().getClassLoader().getResourceAsStream("config/host.properties");
        Properties p = new Properties();
        p.load(in);
        //p.list(System.out);
          
        System.out.println(p.getProperty("ip")+","+p.getProperty("username")+","+p.getProperty("pwd"));
       } catch (Exception e) {
        e.printStackTrace();
       }
    }

    public void update(String path){
        try{
         Properties p = new Properties();
         FileInputStream in = new FileInputStream(path);
         p.load(in);
         FileOutputStream out = new FileOutputStream(path);
        
         p.setProperty("ip","1234567");
         p.store(out,"ip update");
         //p.save(out,"ip updated");
        }catch(Exception ex){
         ex.printStackTrace();
        }
    }
    public static void main(String[] args){
       TestRead td = new TestRead();
       td.read();
       td.update("config/host.properties");
       td.read();
    }
    }
    可以看见修改之前的和修改之后的内容有改变;在上面有点要注意的:
            FileInputStream in = new FileInputStream(path);
            p.load(in);
            FileOutputStream out = new FileOutputStream(path);
    就是p.load(in);要写在FileOutputStream out = new FileOutputStream(path);之前,不然的话,修改后的文件内容就成了ip=1234567,而port=8080这句被覆盖了;什么愿意大家自己想想吧;

    上面介绍了两中读取properties文件的方法,希望对大家有帮助........

  • 相关阅读:
    缓存三大问题及解决方案
    布隆过滤器
    maven 详解
    Netty是什么?
    select、poll、epoll简介
    IO
    Java并发编程:Synchronized及其实现原理
    Java并发之AQS详解
    原子更新字段类
    AtomicStampedReference解决ABA问题
  • 原文地址:https://www.cnblogs.com/soundcode/p/6476527.html
Copyright © 2011-2022 走看看