【何为配置文件】
百度百科解释:用户配置文件就是在用户登录电脑时,或是用户在使用软件时,软件系统为用户所要加载所需环境的设置和文件的集合。它包括所有用户专用的配置设置,如程序项目、屏幕颜色、网络连接、打印机连接、鼠标设置及窗口的大小和位置等。
而在我们的项目中的配置文件一般存储的是项目启动所需的环境设置,例如数据库驱动,用户名以及密码等。而在我们做项目的时候,配置文件一般为后缀名是.xml或者是.properties的文件,当然两者的共同点就是存储项目启动所需的环境设置啦!今天我们主要对比一下他们之间的不同。
【区别说明】
properties配置文件,风格是一个属性对应于一个值(key = value)这样的键值匹对模式。这样给我的感觉就是每一行properties配置文件的键值,对应着一次赋值。事实上,如果你试验一下,在前后两行properties文件中给同一个属性赋不同值,得到的结果往往是属性是后面赋值的值。properties的局限性在于,只能处理赋值。
xml配置文件则是一个树的结构,因此,可以处理各种各样定义好的情况,例如add一个属性之类的,这在properties配置文件中就没有办法实现了。
总体来说,properties配置文件易于理解配置了哪些信息,适合于简单的属性配置。
xml配置文件结构清晰,但是内容比较繁琐,我配置的时侯通常需要查阅相关文档才能保证不会错漏。
xml配置文件则是一个树的结构,因此,可以处理各种各样定义好的情况,例如add一个属性之类的,这在properties配置文件中就没有办法实现了。
总体来说,properties配置文件易于理解配置了哪些信息,适合于简单的属性配置。
xml配置文件结构清晰,但是内容比较繁琐,我配置的时侯通常需要查阅相关文档才能保证不会错漏。
【看外表】
1、sys-config.xml
【对比】从表面上看,.xml格式的要比.properties格式的结构要清晰一些,而.properties文件要比.xml文件结构要简单一些。
【看内涵】
1、从结构上来说:
.xml文件主要是树形结构。
.properties文件主要是以key-value键值对的形式存在。
2、从灵活程度上来说:
.xml格式的文件要比.properties格式的文件更灵活一些
.properties格式的文件已键值对形式存在,主要就是赋值,而且只能赋值,不能够进行其他的操作。
.xml格式的文件可以有多种操作方法,例如添加一个属性,或者做一些其他的定义等。
3、从使用便捷程度来说:
.properties格式的文件要比.xml文件配置起来简单一些。
配置.properties只需要简单的getProperty(key)方法或者setProperty(key,value)方法就可以读取或者写入内容;
配置.xml文件的时候通常要查看文档,因为配置比较繁琐,花费时间长才可以配置完整。
4、从应用程度上来说:
.properties文件比较适合于小型简单的项目。
.xml文件适合大型复杂的项目,因为它比较灵活。
【代码实现:配置文件的写入与读取】
1、读写sys-config.properties文件
package testXMLDemo; import java.io.*; import java.util.Iterator; import java.util.Properties; /** * 读写Properties属性文件 * Created by Cindy on 2016/9/16. */ public class propertiesDemo { public static void main(String [] args) throws IOException{ //readProperties(); writeProperties(); } /** * 读取properties属性文件 */ public static void readProperties()throws IOException{ Properties prop=new Properties(); FileInputStream inputFile=new FileInputStream("src/sys-config.properties"); prop.load(inputFile); Iterator<String> it=prop.stringPropertyNames().iterator(); while(it.hasNext()){ String key=it.next(); System.out.println(key+":"+prop.getProperty(key)); } inputFile.close(); } /** * 生成properties属性文件 */ public static void writeProperties() { Properties prop=new Properties(); try{ //FileOutputStream oFile=new FileOutputStream("sys-config.properties",true); FileOutputStream oFile=new FileOutputStream(new File("src/sys-config.properties"),true); prop.setProperty("driver-name","oracle.jdbc.driver.OracleDriver"); prop.setProperty("url","jdbc:oracle:thin:@localhost:1521:ORCL"); prop.setProperty("user-name","drp1"); prop.setProperty("password","drp1"); prop.store(oFile,"sys-config"); oFile.close(); } catch (FileNotFoundException e) { System.out.println(e); } catch (IOException e) { System.out.println(e); } } }
2、读写sys-config.xml文件(以dom4j方法为例)
package testXMLDemo; import org.dom4j.*; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.List; /** * DOM4J 读写XML * Created by Cindy on 2016/9/16. */ public class dom4JDemo { /** * 生成XML文件 */ public static void generateDocument(){ Document document = DocumentHelper.createDocument(); //创建文档对象 Element catalogElement=document.addElement("catalog"); //创建元素 Element journalElement=catalogElement.addElement("journal"); Element articleElement=journalElement.addElement("article"); Element titleElement=articleElement.addElement("title"); titleElement.setText("Java Configuration with XML Schema"); //设置元素内容值 Element authorElement=articleElement.addElement("author"); Element firstElement=authorElement.addElement("first"); firstElement.addText("Han"); Element lastElement=authorElement.addElement("last"); lastElement.addText("Cindy"); try{ XMLWriter output =new XMLWriter(new FileWriter(new File("D:/catalog.xml"))); //创建输出对象 output.write(document); //将文档对象写入输出对象中 output.close(); } catch (IOException e) { System.out.println(e.getMessage()); } } /** * 读取XML文件 * @throws DocumentException */ public static void getXML() throws DocumentException { SAXReader reader=new SAXReader(); Document document=reader.read(new File("src/sys-config.xml")); //获取文档对象 Element node=document.getRootElement(); //获得根节点 Element dbinfoElement=node.element("db-info"); //获得元素节点 Element drivernameElement=dbinfoElement.element("driver-name"); Element urlElement=dbinfoElement.element("url"); Element usernameElement=dbinfoElement.element("user-name"); Element passwordElement=dbinfoElement.element("password"); String drivername=drivernameElement.getText(); //获得节点内容 String url=urlElement.getText(); String username=usernameElement.getText(); String password=passwordElement.getText(); System.out.println(drivername); System.out.println(url); System.out.println(username); System.out.println(password); } public static void main(String [] args) throws DocumentException { //generateDocument(); getXML(); } }
通过代码我们可以看出.properties文件的读取写入还是比较简单的,而.xml文件的读取和写入就相对于复杂一些,不过它也挺容易理解的。
【总结】
在敲网上商城的时候好像用到过.properties文件,那时候还很模糊,现在在做DRP,配置文件用的是.xml格式的,而公司项目中的配置文件是用的.properties格式的,就想着对比一下它们之间的不同。其实,配置文件还有其他格式的,例如.ini格式的文件,或者".cfg",".conf",".txt"等格式的文件都可以作为配置文件,只不过我接触到的常见的是.xml和.properties文件。