论坛首页 Java企业应用论坛

java读取配置文件工具类

浏览 9195 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-09-19  
最近在维护JAVASE的程序代码,需要将原来写死在程序里面的参数移到配置文件里面,
写了一个获取Properties文件的工具类,
代码1:

public class PropUtil 
{
	
	public static Properties getPropUtil () {
		
		Properties config = new Properties();
		InputStream is = null;
		try {
			is = PropUtil .class.getClassLoader().getResourceAsStream("prop.properties");
			config.load(is);
		} catch (IOException e) {
			
		} finally {//关闭资源
			if (is != null) {
				try {
					is.close();
				} catch (IOException e) {
				}
			}
		}
		log.debug("return prop config");
		return config;
	}
}

代码2:
public class PropUtil {
	private static ResourceBundle resources;
	public static String getParam(String confFileName,String param) {
		resources = ResourceBundle.getBundle(confFileName);
		return resources.getString(param);
	}
}

代码3:
public static String getParameter(String key){
		Properties params = new  Properties();
		FileInputStream in = null;
		String value =null;
		try
		{
			in = new FileInputStream("prop.properties");
			params.load(in);
			value = params.getProperty(key);
		} 
		catch (java.io.IOException e)
		{
			e.printStackTrace();
		}finally {
			if(in!=null) {
				try {
                    in.close();
                } catch (IOException e) {
                	e.printStackTrace();
                }
			}
		}
		return value;
	}

我的是一个纯JAVASE的工程,prop.properties文件放在SRC目录下,代码1和代码2可以正常找到配置项,代码3总是提示资源文件不存在.
问题一:不知道JAVASE中默认的根路径是在哪里呢?不是bin目录下吗
问题二:这三种方式哪个更好呢?
   发表时间:2012-09-19   最后修改:2012-09-19
1. PropUtil.class.getResourceAsStream("prop.properties");  说明这个prop.properties和类PropUtil.class是在同一个目录下

2. 如果改成PropUtil.class.getResourceAsStream("/prop.properties"); 注意有个斜杠,说明是在classpath根目录下,eclipse写的话一般如果是bin目录,netbeans的话可能会在build/classes目录下

3. FileInputStream("prop.properties");  这种是从System Property 'user.dir'下读prop.properties, 用IDE编写的话默认就是你的工程目录,一般来说user.dir是执行java命令所在的当前目录。

4. 不存在所谓的JAVASE默认根路径的说法,java(无论是J2SE还是,J2EE, Web)中只有classpath,看你的java命令怎么配置classpath

**********************************
之前没看清楚楼主内容,这次修改了这个回复内容,去掉PropUtil.class.getClassLoader()的classloader方法
0 请登录后投票
   发表时间:2012-09-19  
diggywang 写道
1. PropUtil .class.getClassLoader().getResourceAsStream("prop.properties");  说明这个prop.properties和类PropUtil.class是在同一个目录下

2. 如果改成PropUtil .class.getClassLoader().getResourceAsStream("/prop.properties"); 注意有个斜杠,说明是在classpath根目录下,eclipse写的话一般如果是bin目录,netbeans的话可能会在build/classes目录下

3. FileInputStream("prop.properties");  这种是从System Property 'user.dir'下读prop.properties, 用IDE编写的话默认就是你的工程目录,一般来说user.dir是执行java命令所在的当前目录。

4. 不存在所谓的JAVASE默认根路径的说法,java(无论是J2SE还是,J2EE, Web)中只有classpath,看你的java命令怎么配置classpath



学了一招呵呵
0 请登录后投票
   发表时间:2012-09-19  
diggywang 写道

2. 如果改成PropUtil .class.getClassLoader().getResourceAsStream("/prop.properties"); 注意有个斜杠,说明是在classpath根目录下,eclipse写的话一般如果是bin目录,netbeans的话可能会在build/classes目录下

我用的这个:PropUtil .class.getClassLoader().getResourceAsStream("prop.properties");可是我的配置文件在SRC目录下了,也可以得到,只是没有这个/
0 请登录后投票
   发表时间:2012-09-19  
commons-configuration
0 请登录后投票
   发表时间:2012-09-19  
diggywang 写道
1. PropUtil .class.getClassLoader().getResourceAsStream("prop.properties");  说明这个prop.properties和类PropUtil.class是在同一个目录下

2. 如果改成PropUtil .class.getClassLoader().getResourceAsStream("/prop.properties"); 注意有个斜杠,说明是在classpath根目录下,eclipse写的话一般如果是bin目录,netbeans的话可能会在build/classes目录下

3. FileInputStream("prop.properties");  这种是从System Property 'user.dir'下读prop.properties, 用IDE编写的话默认就是你的工程目录,一般来说user.dir是执行java命令所在的当前目录。

4. 不存在所谓的JAVASE默认根路径的说法,java(无论是J2SE还是,J2EE, Web)中只有classpath,看你的java命令怎么配置classpath



首先1和2的说法是错的,用了getClassLoader()不需要加/,严重误导人;
3最好写上你文件的绝对地址,这个可以获得;
4正确
0 请登录后投票
   发表时间:2012-09-19  
diggywang 写道

4正确
[/b][/color]




commons-configuration是正确的?我都没明白他说的是啥,求指教
0 请登录后投票
   发表时间:2012-09-19  
myangle89 写道
diggywang 写道

4正确
[/b][/color]




commons-configuration是正确的?我都没明白他说的是啥,求指教




....4指的是第4条  不是4楼的意思
0 请登录后投票
   发表时间:2012-09-19  
傲世凡尘 写道
myangle89 写道
diggywang 写道

4正确
[/b][/color]




commons-configuration是正确的?我都没明白他说的是啥,求指教




....4指的是第4条  不是4楼的意思



3不写绝对地址也没问题啊,为啥要写绝对地址呢
0 请登录后投票
   发表时间:2012-09-19  
myangle89 写道
傲世凡尘 写道
myangle89 写道
diggywang 写道

4正确
[/b][/color]




commons-configuration是正确的?我都没明白他说的是啥,求指教




....4指的是第4条  不是4楼的意思



3不写绝对地址也没问题啊,为啥要写绝对地址呢


看错了,不好意思
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics