java获取文件路径

455 阅读2分钟

背景

  今天开发中遇到导出文件,获取模板所在路径的时候。踩了很多坑。首先就是获取文件路径,获取不到文件的路径(不考虑存放的文件路径不对,没有编译等问题,只考虑文件存放的没有问题查不到路径的情况)。这个问题涉及到获取路径的方式。

代码演示

下面都是获取文件路径的绝对地址

方式一:

项目结构

image.png

代码示例

//文件的名字,包含后缀名
String fileName = "application.yml";
/**
 *resources下就是这个文件,它没有在resources下的其他包里面
 */
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);

//输出结果,  注意结果是流
path=file:/D:/ideaworkspace/manage/manage-web/target/classes/application.yml

项目结构

image.png

代码示例

/**
 * 如果它在resources下的excel包里面,就是下面的写法
 */
 String fileName = "textFile";
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("excel/" + fileName);

方式二:

项目结构

image.png

代码示例

/**
 * 如果它在resources下的excel包里面,就是下面的写法
 */
//文件的名字,包含后缀名
String fileName = "textFile";
URL path = Thread.currentThread().getContextClassLoader().getResource("excel/" + fileName);
String filePath = path.toString();

//输出结果
file:/D:/ideaworkspace/manage/manage-web/target/classes/excel/textFile

   注意,上面的三个获取路径,如果是微服务,他们只能获取自己子模块下的文件路径,如果你所获取的文件径,不在自己的子模块而是在其他的子模块,那上面的代码就获取不到。这时候你就要用下面的方式。

方式三:

项目结构

image.png

代码示例

/**
 * 这个方式可以获取你的子模块所在启动类的resources中的文件
 * 其中FileTest,是你这个代码所在方法的类名,这个类在微服务中的一个子模块,它获取到的路 
 * 径,就是启动类(主模块)下的resources中的文件
 */
//文件的名字,包含后缀名
String fileName = "application.yml";
String path = FileTest.class.getResource("/" + fileName).getPath();

//输出结果,  注意结果是流
path=file:/D:/ideaworkspace/manage/manage-web/target/classes/application.yml