ses目录中对应传入参数类所 在的包目录中寻找属性文件 在操作系统中的当前登录用户的主目录中寻找属性文 件 在系统设定的环境变量CLASSPATH所指向的各个目录中寻找属性文件
其实,guessPropFile方法还可做的更加智能一些,比如在WAR文件的WEB-INF 文件中寻找属性文件。如果要完成这个任务,ClassLoader是关键类,利用它的 getResource方法,就可以获得相应程序中的资源的位置,我们可以在它的基础上 稍加修改就可获得当前Java程序的运行位置信息,其伪代码如下:
获得Class参数的所在的类名
取得该类所在的包名
将包名转换为路径
利用getResource得到当前的类文件所在URL
利用URL解析出当前Java程序所在的路径
Java程序中的配置文件的存放和读取(4)
时间:2011-09-09
具体代码如下:
public class PropHelper{
//其他方法的定义 //............. /
** *getAppPath需要一个当前程序使用的Java类的class属性参数,它可以 返回打包过的 *Java可执行文件(jar,war)所处的系统目录名或非打包Java程 序所处的目录
*@param cls为Class类型
*@return 返回值为该类所在的 Java程序运行的目录
*/ public static String getAppPath(Class cls
){ ClassLoader loader=cls.getClassLoader();
String clsName=cls.getName()+".class";
Package pack=cls.getPackage ();
String path=""; if(pack!=null){
String packName=pack.getName ();
clsName=clsName.substring(packName.length()+1);
if (packName.indexOf(".")<0) path=packName+"/";
else{ int start=0,end=0;
end=packName.indexOf(".");
while(end!=-1){ path=path+packName.substring(start,end) +"/";
start=end+1;
end=packName.indexOf(".",start);
} path=path+packName.substring(start)+"/";
} } java.net.URL url =loader.getResource(path+clsName);
String realPath=url.getPath ();
int pos=realPath.indexOf("file:");
if(pos>-1) realPath=realPath.substring(pos+5);
pos=realPath.indexOf (path+clsName);
realPath=realPath.substring(0,pos-1);
if (realPath.endsWith("!")) realPath=realPath.substring (0,realPath.lastIndexOf("/"));
return realPath;
}//getAppPath定义 结束
}//PropHelper类定义结束
在getAppPath方法的帮助下,我们可以测定当前程序运行的路径是不是包含 WEB-INF/classes路径信息,如果是,则当前程序就可能是运行在Web环境中,这 样,就可以对guessPropFile中的代码进行增加,加入在WEB-INF文件夹寻找属性 文件的方法。 |