背景
今天开发中遇到导出文件,获取模板所在路径的时候。踩了很多坑。首先就是获取文件路径,获取不到文件的路径(不考虑存放的文件路径不对,没有编译等问题,只考虑文件存放的没有问题查不到路径的情况)。这个问题涉及到获取路径的方式。
代码演示
下面都是获取文件路径的绝对地址
方式一:
项目结构
代码示例
//文件的名字,包含后缀名
String fileName = "application.yml";
/**
*resources下就是这个文件,它没有在resources下的其他包里面
*/
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream(fileName);
//输出结果, 注意结果是流
path=file:/D:/ideaworkspace/manage/manage-web/target/classes/application.yml
项目结构
代码示例
/**
* 如果它在resources下的excel包里面,就是下面的写法
*/
String fileName = "textFile";
InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("excel/" + fileName);
方式二:
项目结构
代码示例
/**
* 如果它在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
注意,上面的三个获取路径,如果是微服务,他们只能获取自己子模块下的文件路径,如果你所获取的文件径,不在自己的子模块而是在其他的子模块,那上面的代码就获取不到。这时候你就要用下面的方式。
方式三:
项目结构
代码示例
/**
* 这个方式可以获取你的子模块所在启动类的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