javaweb开发中读取资源文件的路径问题

我们在web开发中经常会涉及到对资源文件的操作,比如读取文件里的数据或者修改文件,但是我们需要先找到这个文件,那么这里就涉及到了路径问题。
首先,我们需要了解两个概念:绝对路径和相对路径。

  • 绝对路径:指存在磁盘下的真正路径。
  • 相对路径:指相对于当前文件的文件路径。

那么我们如何读取到我们的资源文件?

1.绝对路径

现在我的f盘下file文件夹下有个test.txt文件,可以通过绝对路径来读取
在这里插入图片描述
在这里插入图片描述
访问servlet,可以看到控制台输出的路径正确:
在这里插入图片描述
这样写直观明了,但是有个问题,我们知道web应用可能会更换服务器,如果已经上线的项目更换了服务器,那么新的服务器会存在f:\file\test.text这个文件路径ma?显然是不会存在的。因此,绝对路径肃然可以解决问题,但是并不利于项目的维护以及项目的搬迁。

2.相对路径

这里相对路径是指相对于项目路径,通过一个例子来演示。
如图,读取webroot根目录下的1.txt文件
在这里插入图片描述
我们可能在servlet中这样写路径来读取:
在这里插入图片描述
然而一访问发现控制台输出的路径???
在这里插入图片描述
为什么会这样呢?我们知道web应用应该是部署到tomcat的webapp目录下,怎么会到bin目录下去找文件呢?而我的bin目录下没有该文件是肯定读取不到的,这跟java的文件读取机制有关,当我们像这样写路径时,默认是到程序启动的位置去找,tomcat的启动是在bin目录下的startup.bat,所以肯定是找不到的。那么该怎么找?

方式1:通过servlet的getServletContext().getRealPath(“文件名”)

代码如下:
在这里插入图片描述
访问servlet控制台输出:
在这里插入图片描述
很明显,这时候就会到项目根目录下找,原理就是对于ServletContext().getRealPath(“路径名A”);这个方法,无论你的路径名A是什么,ServletContext().getRealPath()方法底层都会在路径名A前拼上当前web应用的硬盘路径,,这样加上你传进去的路径就可以成功找到了

所以,通过这种路径拼接的方式,先通过定位到项目的路径,再拼接就可以找到文件的绝对路径,无论项目搬到哪台服务器,只要文件在项目中的路径不发生改变,就可以动态的找到文件。

但是,这种方法只可以在servlet中使用。在MVC开发模式下,servlet大多数情况下只是进行一些页面跳转,如果普通的java类要读取一些资源文件,那么该如何读取呢?当然也可以写绝对路径来读取,但是跟前面一样,不利于项目维护,一旦服务器环境换了,就可能导致项目挂掉。。此时可以通过类加载器的方式来读取。

方式2.通过类加载器来读取
通过类加载器的getResourc("路径");//这里的路径指相对于class文件的相对路径

我们知道,类加载器会去web应用下WEB-INf/classes路径下去找calss文件,所以只要我们要读取的资源在项目中的路径不变,即使服务器环境更换了,依然可以通过类加载器找到。
项目结构:
在这里插入图片描述

先写一个普通的java类:
在这里插入图片描述
然后在servlet中调用getPath方法,访问servlet:
在这里插入图片描述
对比控制台输出,发现路径正确。
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值