在程序中经常需要访问一些文件,因此获得正确的文件路径是很重要的,由于J2EE程序会被部署到任意位置,因此在程序中的文件路径都会写成相对路径,然而在程序运行中时常会找不到文件。有时在IDE里能访问到的文件,部署到J2EE应用服务器里就找不到文件了,这些问题也着实令人头疼,下面我为大家介绍两个一劳永逸的在Java程序里获取绝对路径的方法。
在使用这些方法之前需要对Java properties文件的用法有一定的了解,即使你不清楚它的用法也没有关系,因为使用它是很容易的事,通过下面的学习你就会明白。
第一种方法,使用.properties文件,在此文件里配置我们需要的使用的文件的名称和绝对路径。
例如,要访问项目外的E:/xslttool/translation/data/test.xml,在config.properties里写上:
xsltPath = E:/xslttool/translation/data/test.xml(注意:不能用"/",要用"/")。
我们将config.properties放置于myproject/WEB-INF/classes/config文件夹下。访问程序如下:
ResourceBundle rb = ResourceBundle.getBundle("config.config", Locale.getDefault());
String filePath = rb.getString("xsltPath");
config.config是config.properties文件的ClassPath,
filePath就是我们想要的文件位置,每次部署时只需要修改config.properties文件就可以保证文件路径的正确。是不是很方便呢?!
第二种方法,使用系统方法。要访问的文件必须是在项目中,例如:项目名称为myproject,被部署到D:/Program Files/Apache/Tomcat 5.0/webapps目录下。现在,要访问myproject/WEB-INF/classes/config/compnent_config.xml文件,访问程序如下:
String filePath = URLDecoder.decode(Thread.currentThread().getContextClassLoader().getResource("config/compnent_config.xml")).getPath());
filePath就是compnent_config.xml的绝对路径D:/Program
Files/Apache/Tomcat 5.0/webapps/myproject/WEB-INF/classes/config/compnent_config.xml。
这种方法每次部署不需要做任何修改就可以获得项目内文件的绝对路径。
总结一下,
第一种方法灵活性不高,每次部署需要修改文件,可以保证能得到正确的文件路径,且可以访问项目外文件。
第二种方法很灵活,每次部署不需要修改文件,却不能访问项目外文件,J2EE应用服务器装载文件方式的不同有时会导致文件定位出错。
在项目里使用哪种方法好要我们自己去权衡使用,在我的项目里是将这两种方法结合起来用。