`
isiqi
  • 浏览: 16463603 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

读取置文件xxx.properties配置文件

阅读更多

  1. mportjava.io.IOException;
  2. importjava.io.InputStream;
  3. importjava.util.Properties;
  4. /**解析xxx.properties文件
  5. *并假定使用ISO8859-1字符编码;即每个字节都是Latin1字符
  6. *对于非Latin1的字符和某些特殊字符,可以使用Unicode转义以键和元素的形式来表示它们
  7. *配置文件格式:
  8. *按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)
  9. *如:键为Truth,值为Beauty
  10. *Truth=Beauty
  11. *Truth=Beauty
  12. *Truth:Beauty
  13. *键为fruits,值为apple,banana,pear,cantaloupe,watermelon,kiwi,mango
  14. *fruits:
  15. *apple,banana,pear,\
  16. *cantaloupe,watermelon,\
  17. *kiwi,mango
  18. *注释行以ASCII字符'#'或'!'作为开头,不参加解析
  19. *@authorguwh
  20. *
  21. */
  22. publicclassTestParseProperties{
  23. privatestaticTestParsePropertiesparseProperties;
  24. //获取java.util.Properties类
  25. Propertiesproperties=newProperties();
  26. privateTestParseProperties(){
  27. try{
  28. this.parseProp();
  29. }catch(Exceptione){
  30. e.printStackTrace();
  31. }
  32. }
  33. publicstaticTestParsePropertiesgetInstance(){
  34. if(parseProperties==null)
  35. parseProperties=newTestParseProperties();
  36. returnparseProperties;
  37. }
  38. publicPropertiesparseProp()throwsIOException{
  39. /**
  40. *Class.getResourceAsStream(Stringname)
  41. *查找具有给定名称的资源,return一个InputStream对象
  42. *如果找不到带有该名称的资源,则返回null
  43. *NullPointerException-如果name是null
  44. */
  45. /**
  46. *配置文件jwt.properties在包src.com.jabberchina.xmppserver.plugin.jwt.vo下
  47. InputStreamis=this.getClass().getResourceAsStream("/com/jabberchina/xmppserver/plugin/jwt/vo/jwt.properties");
  48. */
  49. /**
  50. *配置文件jwt.properties1与本类TestParseProperties在同一包目录src.test下
  51. InputStreamis=this.getClass().getResourceAsStream("jwt.properties1");
  52. */
  53. //配置文件jwt2.properties在包src.test.property下
  54. InputStreamis=this.getClass().getResourceAsStream("property/jwt2.properties");
  55. /**
  56. *Properties.load(InputStreaminStream)从输入流中读取属性列表(键和元素对)
  57. *IOException-如果读取输入流时发生错误。
  58. *IllegalArgumentException-如果输入流包含错误的Unicode转义序列
  59. *此方法返回后,指定的流(inStream)仍保持打开状态,所以若不再使用inStream要手动关闭
  60. *返回类型void
  61. */
  62. properties.load(is);
  63. is.close();
  64. returnproperties;
  65. }
  66. publicStringgetProperties(Stringkey){
  67. /**
  68. *用指定的键在此属性列表中搜索属性
  69. *如果在此属性列表中未找到该键,则接着递归检查默认属性列表及其默认值,如果未找到属性,则此方法返回null
  70. *返回类型String
  71. */
  72. returnproperties.getProperty(key);
  73. }
  74. publicstaticvoidmain(String[]args){
  75. Stringkey="dadaPath";
  76. Stringrestult=TestParseProperties.getInstance().getProperties(key);
  77. System.out.println("protiesvalueis"+restult);
  78. }
  79. }

当然 property也可以读取xml配置文件方法为 property.loadFromXML(InputStream inputStream)

Java代码
  1. /**
  2. *@authorguwh
  3. *@version创建时间:2011-4-2下午03:53:10
  4. *类说明
  5. */
  6. packagetest;
  7. importjava.io.BufferedInputStream;
  8. importjava.io.FileInputStream;
  9. importjava.io.IOException;
  10. importjava.util.Properties;
  11. importorg.apache.commons.io.FilenameUtils;
  12. /**
  13. *XML属性文档具有以下DOCTYPE声明:
  14. *<!DOCTYPEpropertiesSYSTEM"http://java.sun.com/dtd/properties.dtd">
  15. *如:
  16. *<?xmlversion="1.0"encoding="UTF-8"?>
  17. *<!DOCTYPEpropertiesSYSTEM"http://java.sun.com/dtd/properties.dtd">
  18. *<properties>
  19. *<entrykey="pinyin">hehe</entry>
  20. *<entrykey="name">呵呵</entry>
  21. *</properties>
  22. *@authorguwh
  23. *
  24. */
  25. publicclassTestParseXML{
  26. privatestaticTestParseXMLparseXML;
  27. Propertiesproperties=newProperties();
  28. privateTestParseXML(){
  29. try{
  30. this.parseXML();
  31. }catch(Exceptione){
  32. e.printStackTrace();
  33. }
  34. }
  35. publicstaticTestParseXMLgetInstance(){
  36. if(parseXML==null)
  37. parseXML=newTestParseXML();
  38. returnparseXML;
  39. }
  40. publicPropertiesparseXML()throwsIOException{
  41. StringfilePath="D:/";
  42. Stringfilename="test.xml";
  43. /**
  44. *以绝对路径方式从磁盘上读取
  45. *
  46. */
  47. BufferedInputStreaminBuff=newBufferedInputStream(newFileInputStream(filePath+filename));
  48. /**
  49. *以相对路径方式从工程中读取
  50. *Stringfilename="test.xml";
  51. *InputStreaminBuff=this.getClass().getResourceAsStream(filename);
  52. */
  53. if("xml".equalsIgnoreCase(FilenameUtils.getExtension(filename)))
  54. properties.loadFromXML(inBuff);
  55. inBuff.close();
  56. returnproperties;
  57. }
  58. publicStringgerXMLValue(Stringkey){
  59. returnproperties.getProperty(key);
  60. }
  61. publicstaticvoidmain(String[]args){
  62. Stringkey="pinyin";
  63. Stringrestult=TestParseXML.getInstance().gerXMLValue(key);
  64. System.out.println("gerXMLValuevalueis"+restult);
  65. }
  66. }

  67. 注意xml配置文件中的encoding="UTF-8"要与实际文件中的编码方式一致,否则会报错

    二:利用ResourceBundle类读取配置文件此类多用于解析国际化文件

    1. importjava.util.PropertyResourceBundle;
    2. importjava.util.ResourceBundle;
    3. publicclassTestResourceBundleParse{
    4. privateTestResourceBundleParse(){
    5. }
    6. privatestaticPropertyResourceBundleprb;
    7. static{
    8. /**
    9. *name为完全限定名(即包名+文件/类名)
    10. */
    11. Stringname="com.jabberchina.xmppserver.plugin.jwt.util.jwt1";
    12. prb=(PropertyResourceBundle)ResourceBundle.getBundle(name);
    13. }
    14. publicstaticfinalStringgetString(StringpropertyName){
    15. returnprb.getString(propertyName);
    16. }
    17. publicstaticvoidmain(String[]args){
    18. Stringkey="dadaPath";
    19. Stringrestult=TestResourceBundleParse.getString(key);
    20. System.out.println("protiesvalueis"+restult);
    21. }
    22. }

    注意:

    以上方法中读文件时,文件名(即文件路径的书写)是不同的,在方法一中获得InputStream流时若通过Class.getResourceAsStream(String filename)获得,则filename为相对路径+文件名;若通过new FileInputStream(String filename)的其他new一个流的方式获得InputStream流则filename为绝对路径+文件名,即磁盘中实际路径+文件名。而二中通过ResourceBundle.getBundle(String name)的方式获得PropertyResourceBundle对象时,name为完全限定名,需注意!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics