Java获取配置文件跟路径

Posted coshaho

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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读取文件,报找不到文件错误,我写的路径跟报错的路径不一样,怎么回事?

解决项目打jar包后无法获取配置文件的路径问题

java上传文件获取跟目录的办法

普通JAVA类 如何获取,WEB项目的根路径

java 读取配置文件路径问题

如何通过Java代码获取tomcat服务器的绝对路径