java中Properties类的使用

来源:互联网 发布:a星寻路算法c 编辑:程序博客网 时间:2024/05/22 05:30

在java.util 包下面有一个类 Properties,该类主要用于读取以项目的配置文件(以.properties结尾的文件和xml文件)。

Properties的构造函数有两个,一个不带参数,一个使用一个Properties对象作为参数。

使用Properties读取.properties文件

test.properties文件如下:

#测试环境配置:平台路径配置
jstrd_home=D:/TMS2006/webapp/tms2006/WEB-INF/
dbPort = localhost
databaseName = mydb
dbUserName = root
dbPassword = root
# 以下为数据库表信息
dbTable = mytable
# 以下为服务器信息
ip = 192.168.0.9

读取test.properties的方法如下:

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()));

}

}

}

 读取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(); 

        }

    }
}

通过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(); 

        }

    }
}

保存为xml

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.xml"));
     p.storeToXML(fW,"test");

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

        }

    }
}

 

 

Java读取properties文件的方法比较多,网上我最多的文章是“Java读取properties文件的六种方法”,但在Java应用中,最常用还是通过java.lang.Class类的getResourceAsStream(String name) 方法来实现,但我见到众多读取properties文件的代码中,都会这么干:
InputStream in = getClass().getResourceAsStream("资源Name");
这里面有个问题,就是getClass()调用的时候默认省略了this!我们都知道,this是不能在static(静态)方法或者static块中使用的,原因是static类型的方法或者代码块是属于类本身的,不属于某个对象,而this本身就代表当前对象,而静态方法或者块调用的时候是不用初始化对象的。
问题是:假如我不想让某个类有对象,那么我会将此类的默认构造方法设为私有,当然也不会写别的共有的构造方法。并且我这个类是工具类,都是静态的方法和变量,我要在静态块或者静态方法中获取properties文件,这个方法就行不通了。
那怎么办呢?其实这个类就不是这么用的,他仅仅是需要获取一个Class对象就可以了,那还不容易啊--取所有类的父类Object,用Object.class难道不比你的用你正在写类自身方便安全吗
原创粉丝点击