Java读取配置文件的方法

本文介绍了如何在Java中读取properties和XML配置文件,并探讨了使用配置文件而非硬编码参数的优势,例如便于维护和更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

因为在公司中接手别人的服务,他的服务代码很乱,尤其是配置文件这一块,于是我将里面的配置文件这块整理了一下,趁着还么忘记,先写一篇博客记录下。

企业使用配置文件而非直接写死在Java代码中的理由有很多,包括但不限于将自己无法控制的因素写入配置文件中可以在这些因素改变了的时候自己能够方便的进行修改,而不是再一次上传一个新的jar包。要知道,每次上传一个新的jar包都需要重新测试一遍,这个代价非常昂贵。

读取properties文件

读取properties配置文件很方便,代码如下:

import java.io.FileInputStream;
import java.util.HashMap;
import java.util.Properties;

public class demo01 {
    
    public static HashMap<String, String> getProperties(String filepath) {
        
        HashMap<String, String> result = new HashMap<>();
        Properties pro = new Properties();
        FileInputStream fileInputStream;
        
        try {
            fileInputStream = new FileInputStream(filepath);
            pro.load(fileInputStream);
            String userName = pro.getProperty("userName");
            String ip = pro.getProperty("ip");
            String pwd = pro.getProperty("password");
            result.put("userName", userName);
            result.put("ip", ip);
            result.put("pwd", pwd);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } 
        
        return result;
    }
    
}

需要注意的是,getProperty方法的参数值为properties配置文件中的每个条目,以及创建FileInputStream对象的时候可能会报FileNotFoundException错误,Properties对象读取文件的时候可能会报IOException错误,上述代码为了简(tou)洁(lan),就直接catch了Exception,这是不规范的。还有需要注意的就是,企业里面数据库密码不会明文写在配置文件里面,一般是通过调用一个密码服务来获取的。

读取XML文件

另一种用得比较多的配置文件就是 XML文件了,很多的接口返回的数据格式也是XML形式的。读取XML格式的配置文件代码如下:

import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class demo02 {
    public static HashMap<String, String> getProperties(String filepath) {
        HashMap<String, String> pro = new HashMap<>();
                
        try {
            //创建文件对象
            File file = new File(filepath);
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder documentBuilder = factory.newDocumentBuilder();
            Document doc = documentBuilder.parse(file);
            
            //获取节点
            NodeList nl = doc.getElementsByTagName("DB_properties");
            Node node = nl.item(0);
            NodeList nodeList = node.getChildNodes();
            List<String> propertiesList = new ArrayList<String>();
            for (int i = 0; i < nodeList.getLength(); i++) {
                String property = nodeList.item(i).getTextContent();
                propertiesList.add(property);
            }
            
            pro.put("userName", propertiesList.get(0));
            pro.put("ip", propertiesList.get(1));
            pro.put("password", propertiesList.get(2));
        } catch (ParserConfigurationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SAXException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }    
        return pro;
    }

}

这个代码可以优化的地方有不少,因为明天还要上班,没空去改了。

最后,博主工作不久,才疏学浅,如有错误,烦请大家告诉我,不胜感激。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值