JAVA使用相对路径读取配置文件[align=center][/align][size=medium][/size]
在软件开发中常常遇到读取配置文件,以及文件定位问题。今天作个总结。
(一)在java project中的配置文件读取
java project项目的目录结构只有两个src和bin。src中存放的是源文件,bin中存放的是*.class的字节码文件。源文件进过编译就放进bin目录中,其中也包括没有编译的配置文件。咱们须要的是对bin中的配置文件进行读取,由于项目最终打包成*.jar的就是bin目录下的文件。采用相对路劲进行读取的时候,须要肯定此时相对的是哪个基路径。其实这个基路径就是java.io默认定位到的当前用户目录("user.dir")(即工程根目录)。相对于这个路径在定位咱们的配置文件。以下所示:
File file=new File("test/login.conf");
JVM就能够据"user.dir"与"test/login.conf" 获得完整的路径(即绝对路径)"D:\DecisionTree\test\login.conf",从而找到login.conf文件。
一般咱们使用 “类名”.class.getClassLoader().getResource("login.conf").openStream()来加载classes目录下的配置文件。获得文件的输入流。
“类名”.class.getClassLoader().getResource("")定位到的绝对路径是WEB-INF\classes目录下。getResource(String filepath)。参数filepath是classes目录下的相对路径。
(二)在java web project中的配置文件读取 若是咱们把配置文件定义在了classpath路径下。也就是WEB-INF\classes路径下,那么就能够像读取java project中的配置文件那样读取了。 若是咱们把配置文件定义在了WEB-INF的直接目录下。而不是classes目录下,那么是classpath以外的路径了,经过上面的那种方式是读取不到了。这是在应用环境下,要用到ServletContext, ServletActionContext.getServletContext().getResource("/")能够定位到当前web应用目录 如:jndi:/server/TEST/ TEST为当前的web应用系统名。getResource(String filepath) 注意其中filepath必须以“/”开始。 ServletActionContext.getServletContext().getResourceAsStream("/WEB-INF/config/login.conf");就能够获得/WEB-INF/config/login.conf文件的输入流了。