Java 获取配置文件路径
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 获取配置文件路径相关的知识,希望对你有一定的参考价值。
我要写一个工具类读取一个文件,文件放置在src里面,当我的工程部署在tomcat里时,从这个工具类里面怎么获取文件的路径。
使用getResource的路径为空
首先将配置文件转换成InputStream,有两种方式,原理一样,都是通过类加载器得到资源:
(1)InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("xx.properties");
(2) InputStream inputStream =
this.getClass() .getClassLoader().getResourceAsStream( "xx.properties" );
调用对象的getClass()方法是获得对象当前的类类型,这部分数据存在方法区中,
而后在类类型上调用 getClassLoader()方法是得到当前类型的类加载器,我们知道在Java中所有的类都是通过加载器加载到虚拟机中的,而且类加载器之间存在父 子关系,就是子知道父,父不知道子,这样不同的子加载的类型之间是无法访问的(虽然它们都被放在方法区中),所以在这里通过当前类的加载器来加载资源也就 是保证是和类类型同一个加载器加载的。
最后调用了类加载器的getResourceAsStream()方法来加载资源。
(3) 然后加载配置文件,读取属性值
Properties prop = new Properties();
prop.load(input);
String value = prop.getProperty("PropertyName");
input.close(); 参考技术A 标题不完整,路径一般是“classpath:文件名” 参考技术B 你是web工程 要能得到request对象就好了。
String path=servletContext.getRealPath("/"); 得到的就是 编译后web文件夹的路径
path+"/WEB-INF/configs/jdbc.properties" 就可以了。
还是建议用上面的方法
2 上边cl.getResourceAsStream("") 我试了一下只能得到classes下面的文件
也就是\WEB-INF\classes\下的文件
向上去 /WEB-INF/就不行了。
3 可以通过cl得到一个file 你对file进行操作区找 那个配置文件。。
new File(cl.getResource("").getPath()) //这个file就是classes文件夹了
/WEB-INF/
--/configs/jdbc.properties
--/classes/这里就是src的路径了追问
1、没有servletContext、request等对象,就是一个普通的工具类
2、使用getResource的路径为空
Java获取配置文件跟路径
一直以为使用new File(相对路径)可以读取class目录下的文件,其实不然。网上查询了一些资料,弄清楚了原理,总结如下:
package com.coshaho.learn; import java.io.BufferedReader; import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; public class FilePathLearn { public static void main(String[] args) throws IOException { // 方案1 // 获取代码工程路径,生产环境上只有class文件,没有java文件与代码工程,这种方式不可取 File file = new File(""); System.out.println(file.getCanonicalPath()); // 方案2 // 获取代码工程路径,生产环境上使用会出现问题 System.out.println(System.getProperty("user.dir")); // 方案3 // 获取class文件根目录(路径中包含空格会被转义为%20,此时new File会失败) file = new File(FilePathLearn.class.getResource("/").getPath()); System.out.println(file.getCanonicalPath()); // 方案4 // 获取class文件目录(路径中包含空格会被转义为%20,此时new File会失败) file = new File(FilePathLearn.class.getResource("").getPath()); System.out.println(file.getCanonicalPath()); // 方案5 // 可以看出来,这种方法的效果和方案3效果相同 file = new File(FilePathLearn.class.getClassLoader().getResource("").getPath()); System.out.println(file.getCanonicalFile()); // 由于路径可能包含空格,new file可能失败,所以可以直接打开流读取文件 InputStream stream = FilePathLearn.class.getResource("CE_Excel.xml").openStream(); InputStreamReader reader = new InputStreamReader(stream); BufferedReader bufReader=new BufferedReader(reader); String str = null; while ((str = bufReader.readLine()) != null) { System.out.println(str); } } }
以上是关于Java 获取配置文件路径的主要内容,如果未能解决你的问题,请参考以下文章