Java学习-023-Properties 类 XML 配置文件读取及写入源代码
之前的几篇 Properties 文章已经讲述过了 Java 配置文件类 Properties 的基本用法,查看 JDK 的帮助文档时,也可看到在 Properties 类中还有两个方法 loadFromXML(InputStream) 和 storeToXml(OutputStream, String, String),由方法名中的 xml 不难确定这两个方法分别是读取/写入数据到 xml 文件。JDK 文档部分如下所示:
因而此文将通过源码实例演示 Properties 类是如何将数据写入 xml 文件中,及如何读取数据的。当然,写入 xml 的数据需要符合一定的标准,即以 键值对 的形式存在;同时,生成的 xml 文件的格式可参考上图中的 properties.dtd。
话不多言,小二上码。。。敬请各位小主参阅。若有不足之处,敬请大神指正,不胜感激!
创建 xml 文件源码如下所示:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /** 2 * @function Write data to xml file by Properties 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java propertiesWriteXml, 2014-11-20 16:47:47 Exp $ 6 * 7 * @param filename : full path 8 * @param author : creator 9 * @param configs : file contents 10 * @return boolean 11 */ 12 public boolean propertiesWriteXml(String filename, String author, ArrayList<String[]> configs){ 13 Properties properties = new Properties(); 14 boolean success = false; 15 16 /* 参数校验: 参数非法时, 抛出参数非法异常 */ 17 if (filename == null || "".equals(filename) || author == null || "".equals(author) || configs.isEmpty()) { 18 throw new IllegalArgumentException(); 19 } 20 21 try { 22 OutputStream os = new FileOutputStream(filename); 23 24 for (String[] row : configs) { 25 properties.setProperty(row[0].trim(), row[1].trim()); 26 } 27 28 properties.storeToXML(os, "author:" + author, "UTF-8"); 29 os.close(); 30 31 success = true; 32 } catch (IOException ioe) { 33 this.message = "文件 {" + filename + "} 写入失败!"; 34 this.logger.error(this.message, ioe); 35 } 36 37 return success; 38 }
读取 xml 文件源码如下所示:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /** 2 * @function Read xml file by Properties 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoUISelenium main.java.aaron.java.tools FileUtils.java xmlReadByProperties, 2014-11-20 16:46:53 Exp $ 6 * 7 * @param filename : 文件全路径 8 * 9 * @return Properties 10 */ 11 public Properties propertiesReadXml(String filename){ 12 Properties properties = new Properties(); 13 14 /* 参数校验: 为null或空字符串时, 抛出参数非法异常 */ 15 if (filename == null || "".equals(filename) || !this.assertFileType(filename, "XML")) { 16 throw new IllegalArgumentException(); 17 } 18 19 try { 20 /* 获取文件数据流 */ 21 InputStream is = new FileInputStream(filename); 22 /* 加载文件数据流 */ 23 properties.loadFromXML(is); 24 /* 关闭文件数据流 */ 25 is.close(); 26 } catch (IOException ioe) { 27 properties = null; 28 29 this.message = "文件 {" + filename + "} 读取失败!"; 30 this.logger.error(this.message, ioe); 31 } 32 33 return properties; 34 }
测试源码如下所示:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 /** 2 * Test : Write/Read data to/from XML file 3 * 4 * @author Aaron.ffp 5 * @version V1.0.0: autoUISelenium test.java.aaron.java.tools FileUtilsTest.java test_propertiesWriteXml, 2014-11-20 16:53:53 Exp $ 6 * 7 */ 8 public void test_propertiesWriteReadXml(){ 9 this.message = "\n\n\nTEST:FileUtils.propertiesWriteXml(String filename, String author, ArrayList<String[]> configs)" + 10 "\n FileUtils.propertiesReadXml(String filename)"; 11 this.logger.debug(this.message); 12 13 this.fu = new FileUtils(); 14 String filename = this.constantslist.PROJECTHOME + this.constantslist.FILESEPARATOR + 15 "testng-temp" + this.constantslist.FILESEPARATOR + "test_propertiesWriteReadXml.xml"; 16 17 ArrayList<String[]> configs = new ArrayList<String[]>(); 18 19 String author = "Aaron.ffp"; 20 21 for (int i = 0; i < 10; i++) { 22 String[] row = new String[2]; 23 24 row[0] = i + ""; 25 row[1] = "The row number is " + (i + 1); 26 27 configs.add(i, row); 28 } 29 30 if (this.fu.propertiesWriteXml(filename, author, configs)) { 31 Assert.assertEquals(this.fu.propertiesGetValue(this.fu.propertiesReadXml(filename), "2"), "The row number is 3", "Test case failed."); 32 } else { 33 this.message = "Test case failed, please check the data file : " + filename; 34 Assert.fail(this.message); 35 }; 36 }
程序执行结果如下所示:
生成的 xml 文件内容如下所示:
至此, Java学习-023-Properties 类创建 XML 文件 顺利完结,希望此文能够给初学 Java 的您一份参考。
最后,非常感谢亲的驻足,希望此文能对亲有所帮助。热烈欢迎亲一起探讨,共同进步。非常感谢! ^_^
欢迎 【 留言 || 关注 || 打赏 】 。您的每一份心意都是对我的鼓励和支持!非常感谢!欢迎互加,相互交流学习!
作者:范丰平,本文链接:https://www.cnblogs.com/fengpingfan/p/4608922.html
Copyright @范丰平 版权所有,如需转载请标明本文原始链接出处,严禁商业用途! 我的个人博客链接地址:http://www.cnblogs.com/fengpingfan
![](https://images.cnblogs.com/cnblogs_com/fengpingfan/2153325/o_220506115434_gzgqrb.png)