Java 获取配置文件路径

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 获取配置文件路径相关的知识,希望对你有一定的参考价值。

我要写一个工具类读取一个文件,文件放置在src里面,当我的工程部署在tomcat里时,从这个工具类里面怎么获取文件的路径。
使用getResource的路径为空

读取配置文件 , xxx.properties放在webroot/WEB-INF/classes/目录下

首先将配置文件转换成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 获取配置文件路径的主要内容,如果未能解决你的问题,请参考以下文章

java 读取配置文件路径问题

关于logback如何通过当前配置文件获取路径

Java获取配置文件跟路径

java 获取当前类的路径

java 工程里有配置文件 打包成jar文件 找不到配置文件的路径 这个路径该怎么写!!

java 导出excel 关于导出路径的配置 求解答 求配置文件的例子