因为在公司中接手别人的服务,他的服务代码很乱,尤其是配置文件这一块,于是我将里面的配置文件这块整理了一下,趁着还么忘记,先写一篇博客记录下。
企业使用配置文件而非直接写死在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;
}
}
这个代码可以优化的地方有不少,因为明天还要上班,没空去改了。
最后,博主工作不久,才疏学浅,如有错误,烦请大家告诉我,不胜感激。