读取properties文件内容

本文介绍使用Spring框架读取properties配置文件的方法,并演示如何通过Java的Properties类直接操作配置文件。

在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选择配置文件来完成,本文根据我工作中用到的读取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这句被覆盖了;什么愿意大家自己想想吧;

<think>好的,用户现在需要了解如何读取和修改Java中的properties文件。首先,我需要回顾一下之前用户的问题历史。之前用户询问了如何清空文件夹下的内容,现在转向了properties文件的操作,这可能是在处理配置文件时需要常见的任务。 用户可能是Java开发者,可能在开发应用时需要动态调整配置,比如数据库连接参数或者应用设置。读取和修改properties文件是基础但重要的技能,所以用户需要详细的步骤和注意事项,以确保操作正确无误。 首先,我需要考虑标准的Java方法。Java提供了java.util.Properties类来处理.properties文件读取文件通常用load()方法,而写入则用store()。需要注意字符编码,因为早期版本可能默认使用ISO-8859-1,导致中文乱码。现在应该推荐使用UTF-8,可能需要用InputStream和OutputStream来指定编码。 接下来,用户可能需要知道如何修改现有的属性值或者添加新的属性。这里需要强调在保存时不要添加额外的注释,因为Properties的store方法默认会添加日期注释,但用户可能不希望这样。可以用store方法的参数来避免,或者使用第三方库如Apache Commons Configuration来更好地处理。 另外,用户可能会遇到文件路径的问题,尤其是在不同的环境中运行程序时。需要提醒用户使用相对路径和绝对路径的注意事项,以及如何正确获取文件路径,比如使用ClassLoader来读取资源文件。 还有,异常处理也很重要。文件不存在或无法写入时的处理,应该捕获IOException并适当处理,比如记录日志或抛出异常让调用者处理。 然后,考虑第三方库的方法。比如Apache Commons Configuration支持更复杂的操作,比如保留注释、格式等,这对于需要保持配置文件结构不变的情况很有用。虽然需要添加依赖,但对于项目来说可能更高效。 用户可能还需要知道如何保持原有的注释和格式,这在标准Java方法中是做不到的,因为Properties类在保存时会丢失注释。这时候推荐使用Apache Commons Configuration或其它库。 此外,需要考虑并发问题,如果多个线程或进程同时读写同一个properties文件,可能导致数据不一致或损坏。需要提醒用户在处理时加锁或同步机制。 最后,应该给出不同方法的优缺点比较,帮助用户根据项目需求选择最合适的方案。比如标准方法无需依赖,但功能有限;第三方库功能强大但需要引入依赖。 总结步骤:读取文件、修改内容、保存文件,每个步骤的注意事项,比如编码、路径、异常处理、保留格式等。同时给出代码示例,确保用户可以直接参考使用。可能还需要提醒用户测试修改后的文件是否生效,特别是在生产环境中谨慎操作,避免配置错误导致应用故障。</think>--- 在Java读取并修改`.properties`文件,需通过`java.util.Properties`类实现,以下是完整实现方案及注意事项: --- ### **一、标准Java方法** #### **步骤说明** 1. **读取文件**:使用`Properties.load()` 2. **修改内容**:通过`setProperty(key, value)` 3. **保存文件**:使用`Properties.store()` #### **代码示例** ```java import java.io.*; import java.util.Properties; public class PropertiesEditor { public static void main(String[] args) { String filePath = "config.properties"; try (InputStream input = new FileInputStream(filePath)) { // 1. 读取文件 Properties props = new Properties(); props.load(input); // 2. 修改内容(例如:修改"db.url",新增"timeout") props.setProperty("db.url", "jdbc:mysql://localhost:3306/new_db"); props.setProperty("timeout", "30"); // 3. 保存修改(指定UTF-8编码) try (OutputStream output = new FileOutputStream(filePath)) { props.store(output, "Updated configuration"); // 若需去除注释,可替换为: // props.store(new OutputStreamWriter(output, StandardCharsets.UTF_8), null); } } catch (IOException e) { e.printStackTrace(); } } } ``` --- ### **二、处理中文与编码问题** #### **关键点** - **默认编码风险**:`Properties.load()`默认使用`ISO-8859-1`,可能导致中文乱码。 - **解决方案**:强制使用`UTF-8`编码: ```java props.load(new InputStreamReader(input, StandardCharsets.UTF_8)); props.store(new OutputStreamWriter(output, StandardCharsets.UTF_8), null); ``` --- ### **三、使用Apache Commons Configuration(高级功能)** #### **依赖配置** ```xml <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-configuration2</artifactId> <version>2.9.0</version> </dependency> ``` #### **代码示例(保留注释和格式)** ```java import org.apache.commons.configuration2.PropertiesConfiguration; import org.apache.commons.configuration2.io.FileHandler; public class AdvancedPropertiesEditor { public static void main(String[] args) { String
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值