Posted on 2009-06-07 01:02
Gavin.lee 阅读(1302)
评论(0) 编辑 收藏 所属分类:
java SE & EE
我们在项目中肯定会碰到很多配置文件情况,在这种情况下,加载属性文件就是不可避免的了。
我这里提供两个方案:
【一】直接在src目录下或在其子包下:
package com.Gavin.tools.des;

import java.util.ResourceBundle;

/** *//**
* @descripte load resource
* @author Gavin.lee
* @date 2009-5-19上午09:49:32
* @version 1.0
*
*/

public class ResourceLoader
{
private ResourceBundle resBundle;

public ResourceLoader(String resourceName)
{
resBundle = ResourceBundle.getBundle(resourceName);
}

public String getString(String key)
{
return resBundle.getString(key);
}

public static void main(String args[])
{
System.out.println(new ResourceLoader("config").getString("username")); //config in src
System.out.println(new ResourceLoader("doingjava.config").getString("username")); //config in doingjava
}
}

使用 Properties类中的load方法


package com.yixun.wap;


/** *//** *//** *//**
* @author Gavin.lee
* @date 09-4-30 17:20pm
* @version 1.0
*/
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;


public class LoadProperties
{

public void getSource(String source)
{
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(source);
Properties prop = new Properties();

try
{
prop.load(inputStream);

} catch (IOException e)
{
e.printStackTrace();
}
prop.setProperty("truename", "李显武");
System.out.println("username:" + prop.getProperty("username") + ",password:" + prop.getProperty("password"));
System.out.println("truename:" + prop.getProperty("truename"));
prop.clear(); //只想加载用一次的话 可以清空
// System.out.println("truename:" + prop.getProperty("truename"));
// System.out.println("username:" + prop.getProperty("username") + ",password:" + prop.getProperty("password"));
}


public static void main(String[] args)
{

new LoadProperties()..getSource("config.properties").getProperty("username");
}

}
【二】可以指定properties 到自己想要的目录下:

package com.Gavin.tools.util;

import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;


/** *//** *//** *//**
*
* @descripte 任意加载properties文件
* @author Gavin.lee
* @date 2009-6-7 0:55:18
* @version 1.0
*/

public class ReadConfig
{
static String path = WriteLog.class.getResource("/").getPath();
static String projectPath = path.substring(0, path.length()-16);// 到 WebRoot 下
private static final String PFILE = projectPath + "config.properties";

/** *//** *//** *//**
* 对应于属性文件的文件对象变量
*/
private File m_file = null;


/** *//** *//** *//**
* 属性文件的最后修改日期
*/
private long m_lastModifiedTime = 0;


/** *//** *//** *//**
* 属性文件所对应的属性对象变量
*/
private Properties m_props = null;

private static ReadConfig m_instance = new ReadConfig();


/** *//** *//** *//**
* 私有的构造器,用以保证外界无法直接实例化
*/

private ReadConfig()
{
m_file = new File(PFILE);
m_lastModifiedTime = m_file.lastModified();

if (m_lastModifiedTime == 0)
{
System.err.println(PFILE + " file does not exist!");
}
m_props = new Properties();

try
{
m_props.load(new FileInputStream(PFILE));

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


/** *//** *//** *//**
* 静态工厂方法
* @return 返还ReadConfig 类的单一实例
*/

synchronized public static ReadConfig getInstance()
{
return m_instance;
}


/** *//** *//** *//**
* 读取一特定的属性项
*
* @param name 属性项的项名
* @param defaultVal 属性项的默认值
* @return 属性项的值(如此项存在), 默认值(如此项不存在)
*/

public String getConfigItem(String name, String defaultVal)
{
long newTime = m_file.lastModified();
// 检查属性文件是否被其他程序
// 如果是,重新读取此文件


if (newTime == 0)
{
// 属性文件不存在

if (m_lastModifiedTime == 0)
{
System.err.println(PFILE + " file does not exist!");

} else
{
System.err.println(PFILE + " file was deleted!!");
}
return defaultVal;

} else if (newTime > m_lastModifiedTime)
{
// Get rid of the old properties
m_props.clear();

try
{
m_props.load(new FileInputStream(PFILE));

} catch (Exception e)
{
e.printStackTrace();
}
}
m_lastModifiedTime = newTime;
String val = m_props.getProperty(name);

if (val == null)
{
return defaultVal;

} else
{
return val;
}
}


/** *//** *//** *//**
* 读取一特定的属性项
*
* @param name 属性项的项名
* @return 属性项的值(如此项存在), 空(如此项不存在)
*/

public String getConfigItem(String name)
{
return getConfigItem(name, "");
}

public static void main (String args[])
{
System.out.println(ReadConfig.getInstance().getConfigItem("username"));
}
}
properties :
#url=wap.500wan.com
username = doingjava
password = lixianwu
birthday =1986-06-03
像这样的properties文件,用上面的三个类都是任意可读的。都在项目中试验过,均可使用。 O(∩_∩)O~
,%%%%%%%%,
,%%/\%%%%/\%%
,%%%\c "" J/%%%
%. %%%%/ o o \%%%
`%%. %%%% _ |%%%
`%% `%%%%(__Y__)%%'
// ;%%%%`\-/%%%'
(( / `%%%%%%%'
\\ .' |
\\ / \ | |
\\/ ) | |
\ /_ | |__
(___________)))))))【这个狮子很形象哈,呵呵】