栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Springboot读取项目文件夹下文件之本地IDEA和打成jar后的区别

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Springboot读取项目文件夹下文件之本地IDEA和打成jar后的区别

1.Springboot访问项目根目录下的文件:
public static final String PROJECT_ROOT_DIRECTOR = System.getProperty("user.dir");

在本地Idea下访问是可以的,其对应本地的文件结构如下:

但是在打包成jar发布到线上服务器上会发现,存在问题。此时上面指定的文件夹是和jar同目录:

2.Springboot访问资源文件夹的路径:

补充知识:在springboot的resource下可以新建名称为static的目录,此目录是不安全的,可以直接外网访问,比如本地启动,static下有一个img/a.jpg,那么可以直接localhost:端口/服务名/img/a.jpg.前端页面也可以直接:src="img/a.jpg".

言归正传~~~~~~~~~~omg:

Q:访问resources/static/test.txt文件

2.1 传统方式:

File file = new File("src/main/resources/static/test.txt");
InputStream inputStream=new FileInputStream(file);

      打包成jar后,jar文件的目录结构不会从src开始,jar文件中的资源,读取时必须使用流的方式。

       File的构造参数必须是相对项目路径的根路径,如果项目下还有module,还需要添加module-name+src/main/....

结论:在idea上运行是可以的,但是打成jar包是会报文件找不到异常的File NOT FOUND EXCEPTION。

2.2 ResourceUtils工具类

File file = ResourceUtils.getFile("classpath:static/test.txt");
InputStream inputStream=new FileInputStream(file);

Idea启动没有问题;jar启动会报错:

class path resource [static/text.txt] cannot be resolved to absolute file path because it does not exist

(不能解析为绝对文件路径,因为它不在文件系统中)

结论:这种方式在idea上运行是可以的,但是打成jar包是会报文件找不到异常的。

2.3 ClassPathResource类

ClassPathResource classPathResource = new ClassPathResource("static/test.txt");
InputStream inputStream = classPathResource.getInputStream();

 注意:此除必须用流读取:

如果使用类似下列方式获取路径地址:

classPathResource.getFile().getAbsoluteFile().toString();

则会报错:

class path resource [static/text.txt] cannot be resolved to URL because it does not exist 

结论:Idea和jar都行。

附:jar解压的文件结构:

       在IDEA中module-name下有src/main/java和src/main/resource两个文件夹,两个文件夹下的针对打出的jar来说都在BOOT-INF下。不含有src/main目录。

项目工程目录结构:

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/434261.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号