Java中的属性Properties

来源:互联网 发布:富途牛牛 mac 编辑:程序博客网 时间:2024/05/19 17:05

Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:

  • 枚举(Enumeration)
  • 位集合(BitSet)
  • 向量(Vector)
  • 栈(Stack)
  • 字典(Dictionary)
  • 哈希表(Hashtable)
  • 属性类(Properties)

以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection),我们后面再讨论。下面讲解一下Properties类!


Properties类的特点:

1.Properties 继承于 Hashtable.表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串

2.Properties 类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。

3.Properties 定义如下实例变量.这个变量持有一个Properties对象相关的默认属性列表。

4.该类主要用于读取以项目的配置文件(以.properties结尾的文件和xml文件)

Properties defaults;

Properties类定义了两个构造方法.

 第一个:

没有默认值。

Properties()

第二个:

使用propDefault 作为默认值。两种情况下,属性列表都为空

Properties(Properties propDefault)

除了从Hashtable中所定义的方法,Properties定义了以下方法:

 String getProperty(String key) 
          用指定的键在此属性列表中搜索属性。 
 String getProperty(String key, String defaultValue) 
          用指定的键在属性列表中搜索属性。

 void list(PrintStream out) 
          将属性列表输出到指定的输出流。 
 void list(PrintWriter out) 
          将属性列表输出到指定的输出流。 

 void load(InputStream inStream) 
          从输入流中读取属性列表(键和元素对)。 
 void loadFromXML(InputStream in) 
          将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。

 Enumeration<?> propertyNames() 
          返回属性列表中所有键的枚举,如果在主属性列表中未找到同名的键,则包括默认属性列表中不同的键。 
 void save(OutputStream out, String comments) 
          已过时。 如果在保存属性列表时发生 I/O 错误,则此方法不抛出 IOException。

  保存属性列表的首选方法是通过 store(OutputStream out, String comments) 方法或 storeToXML(OutputStream os, String comment) 方法来进行。 
 Object setProperty(String key, String value) 
          调用 Hashtable 的方法 put。 
 void store(OutputStream out, String comments) 
          以适合使用 load 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。 
 void storeToXML(OutputStream os, String comment) 
          发出一个表示此表中包含的所有属性的 XML 文档。 
 void storeToXML(OutputStream os, String comment, String encoding) 
          使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档。


实例1:
【读取*.properties的方法如下(从输入流中读取属性列表):

Properties prop = new Properties();
InputStream in = getClass().getResourceAsStream("/IcisReport.properties");
prop.load(in);
Set keyValue = prop.keySet();
for (Iterator it = keyValue.iterator(); it.hasNext();)
{
String key = (String) it.next();
}
----------------------------------
  impor java.io.*;
  import java.util.*;
  public class ReadProperties {
   public static void main(String[] args) {
   File pFile = new File("e:\test.properties");  // properties文件放在e盘下(windows)
   FileInputStream   pInStream=null;
    try {
     pInStream = new FileInputStream(pFile );
    } catch (FileNotFoundException e) {
      e.printStackTrace();  //To change body of catch statement use File | Settings | File Templates.
    }
    Properties p = new Properties();
    try {
      p .load(pInStream );  //Properties 对象已生成,包括文件中的数据
    } catch (IOException e) {
     e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    }
    Enumeration enu = p.propertyNames();  //取出所有的key
    //输出方法1
    p.list(System.out) ;  //System.out可以改为其他的输出流(包括可以输出到文件)
    //输出方法2
          while( enu .hasMoreElements()){
      System.out.print("key="+enu.nextElement());
      System.out.print("value="+p.getProperty((String)enu .nextElement()));
    }
  }
    }


实例2:
【读取xml格式的配置文件
  test.xml文件ruxi
  <?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
  <properties>
  <entry key="koo">bar</entry>
  <entry key="fu">baz</entry>
  </properties>

  读取xml的方法
  import java.io.IOException;
  import java.io.File;
  import java.io.FileInputStream;
  import java.util.Properties;
  public class Test {
  public static void main(String[] args) {
    File pFile = new File("e:\test.xml");    // properties文件放在e盘下(windows)
    FileInputStream pInStream = null;
    try {
      pInStream = new FileInputStream(pFile);
      Properties p = new Properties();
      p.loadFromXML(pInStream);
      p.list(System.out);
      } catch (IOException e) {
      e.printStackTrace();
    }
    }
  }

实例3:
【通过list 方法将Properties写入.properties文件
  import java.io.IOException;
  import java.io.File;
  import java.io.FileInputStream;
  import java.io.PrintStream;
      import java.util.Properties;

  public class Test {
    public static void main(String[] args) {
      Properties p = new Properties();
      p.setProperty("id","dean");
      p.setProperty("password","123456");
      try{
        PrintStream fW = new PrintStream(new File("e:\\test1.properties"));
         
p.list(fW ); 
          } catch (IOException e) {
          e.printStackTrace();
      }
    }
  }
运行结果:





实例4:
【保存为.xml
package Thread;
import java.io.IOException;
import java.io.File;
import java.io.PrintStream;
import java.util.Properties;
public class Test {
public static void main(String[] args) {
Properties p = new Properties();
p.setProperty("id", "dean");
p.setProperty("password", "123456");
try {
PrintStream fW = new PrintStream(new File("e:\\test1.xml"));
p.storeToXML(fW, "test");

} catch (IOException e) {
e.printStackTrace();
}
}
}

运行结果:


实例5

【下面的程序说明这个数据结构支持的几个方法:

import java.util.*;public class PropDemo {   public static void main(String args[]) {      Properties capitals = new Properties();      Set states;      String str;            capitals.put("Illinois", "Springfield");      capitals.put("Missouri", "Jefferson City");      capitals.put("Washington", "Olympia");      capitals.put("California", "Sacramento");      capitals.put("Indiana", "Indianapolis");      // Show all states and capitals in hashtable.      states = capitals.keySet(); // get set-view of keys      Iterator itr = states.iterator();      while(itr.hasNext()) {         str = (String) itr.next();         System.out.println("The capital of " +            str + " is " + capitals.getProperty(str) + ".");      }      System.out.println();      // look for state not in list -- specify default      str = capitals.getProperty("Florida", "Not Found");      System.out.println("The capital of Florida is "          + str + ".");   }}

以上实例编译运行结果如下:

The capital of Missouri is Jefferson City.The capital of Illinois is Springfield.The capital of Indiana is Indianapolis.The capital of California is Sacramento.The capital of Washington is Olympia.The capital of Florida is Not Found.


0 0
原创粉丝点击