拼吾爱程序人生

首页 » 其他编程 » Java » java 读取 propterties 文件
cobra - 2008-10-4 9:06:00
最近在重构自己的小Demo 想把自己的下Demo 变成可以配置的程序。但是遇到了一些困难,走了不少的弯路,最终还是解决了。 如果你是个牛人,你不用看了,写这些东西是给和我一样的菜鸟看的。
先说说我的Demo吧,我写的是一个简单新闻管理系统,很简陋的那种,不过麻雀虽小,但是五脏俱全。
基本的增、删、查、改,都有,用到了FCKeditor。一开始我连接数据库用的是最原始的方法,把数据库的连接信息全写在代码里,写完以后就没去管他了,十一放假这几天,看了看自己的代码,觉得代码结果不好,于是就开始重构自己的代码,首先就是重写数据库的连接管理我把连接数据库的一些基本信息写到了database.properties 文件里,然后从程序中读取连接数据库所需要的信息。但是看似简单的东西,比且很容易的完成的工作,我却遇到了不少麻烦。首先就是路径的问题,其次是该以何种方式读取;就这两个问题困扰了两天。(呵呵,见笑了)

java读取propterties文件有三种方法:

Code


注意括号中代码的不同。

    先让大家看一段代码吧:
DataSource.java 文件:

Code


我的文件包结构:

 附件: 您所在的用户组无法下载或查看附件

第一个要说的是:FileInputStream in = new FileInputStream("database.properties");
网上有很多人说这条语句是从当前目录中加载database.properties文件的,但是我得出的结果是:它是从classpath 中加载database.properties文件的。
因为我用的是IDE 是NetBeans 我以为直接放在当前包内就可以了,但是我发现这样不行。具体放哪里我也不知道,后来用了另一种方法:
InputStream in = Object.class.getResourceAsStream("/org/news/comm/database.properties")
基本上是可以用了,一开始测试的时候还挺开心的。很顺利的就通过了,但是当我真正运行项目的时候问题又来了,程序报了 空指针引用 错误。我就很纳闷了为什么在单个文件里测试可以很容易的通过,一运行项目就会报错呢?于是开始Debug,不Debug 不知道,一用吓一跳:

Code


in的值竟然是空的,难怪会报空指针错误了。单独测试DataSource.java文件的时候运行正常啊,没有报错,in 也有值,但是为什么运行项目的时候又没有值了呢?很是不解。

于是我google 了一把,最后看现了几篇好文章 说的是如何读取 propterties 文件。最终我发现用第二种
方法是有弊端的,关键就在Object 上,它所有类的父类,在单个文件中用他来读取propterties文件还可以但是一运行项目,他就不起作用了,也不知道为什么。难道是java 的bug??或者说是NetBeans的bug??
我同样的Eclipse 下测试过,结果是一样的。

最后我将输入流语句稍微改了一下,变成下面的样子:

Code


其实就是改个类名而已,让他自身去定位propterties文件,就解决问题了。(注意括号中红色的部分,org前面的 "/" 绝对不能少,要不然会报错的。)
无论是测试单文件还是,测试整个项目都没问题了。(那个高兴啊)

database.propterties 文件很简单:

Code


总结一下读取propterties文件方法的不同:(JavaWorld里的内容,呵呵拿来用一下)

Behavioral differences

 附件: 您所在的用户组无法下载或查看附件

推荐给大家一篇JavaWorld里面好的文章,里面讲述使用不同方式读出propterties文件的方式,以及他们之间的不同:Smartly load your properties




(文/gml520  出处/BLOGJAVA)

 您可能对 [Java] 的这些文章也感兴趣:

爪哇语言观察者模式介绍
Java网络编程之URI、URL研究(上)
Enterprise JavaBeans 组件慨述之三
【转帖】学好编程的关键
P2P的Jxta解决之道
Web Service安全机制探讨
SUN JavaFX将完全开源
用Java实现SMTP服务器
JavaScript的document和window对象详解
WAS与IHS结合时如何配置SSL
netsesame - 2008-10-13 15:30:00
学习中。。。
1
查看完整版本: java 读取 propterties 文件
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com