在JavaWeb工程目录中的WebRoot是应用项目的根目录( 咱们知道发布到Tomcat服务器中的就是这个WebRoot目录),在项目的目录下文件的 文件路径和 文件IO流如何获取呢?
如 WebRoot目录下的b.txt 和 a.txt
获取真实路径
可以使用ServletContext对象来获取Web应用下的资源。
例如 期望获取根目录下的文件dp.properties 在服务器端的真实路径
String contextPath = getServletContext().getRealPath("dp.properties");
再例如在hello应用的根目录下创建a.txt文件,现在想在Servlet中获取这个资源,就可以使用ServletContext来获取。
获取a.txt的真实路径:String realPath =servletContext.getRealPath(“/a.txt”),realPath的值为a.txt文件的绝对路径:F:\tomcat9\webapps\hello\a.txt;
获取b.txt的真实路径:String realPath =servletContext.getRealPath(“/WEB-INF/b.txt”);F:\tomcat9\webapps\web_filter\WEB-INF\b.txt
其中,方法getRealPath(path)的路径path 的参数值 “/a.txt” 的 / 表示 应用项目的根目录。
----- 是针对getRealPath()
获取资源流
ServletContext提供了一种更加简洁的方式,可以通过ServletContext获取资源流,即把资源以输入流的方式获取:
获取a.txt资源流:InputStream in =servletContext.getResourceAsStream(“/a.txt”);
获取b.txt资源流:InputStream in =servletContext.getResourceAsStream(“/WEB-INF/b.txt”);
获取类路径下资源
获取classes目录下的资源
通过使用Class或者ClassLoader:可以较为便捷的获取到类路径下的资源。
上面是通过ServletContext的getResourceAsStream方法,这里要通过Class或者ClassLoader的getResourceAsStream方法。
InputStream in = this.getClass().getResourceAsStream("/xxx.txt");
通过Class类的对象来获取类路径下的资源,对应JavaWeb应用的类路径就是classes目录下的资源。
具体的代码为:Class类的getResourceAsStream(String path)
路径以“/”开头,相对classes路径;
路径不以“/”开头,相对当前class文件所有路径,例如在com.servlet.MyServlet中执行,那么相对/classes/com/servlet/路径;
例如:
InputStream in = com.servlet.MyServlet.class.getResourceAsStream("a.jpg");
获取的是:/WEB-INF/classes/com/servlet/a.jpg,即与MyServlet.class同目录下的资源
例如:
InputStream in = com.servlet.MyServlet.class.getResourceAsStream("/a.jpg");
获取的是:/WEB-INF/classes/a.jpg,即类路径的根目录下的资源,类路径的根目录就是/classes目录
通过ClassLoader类的对象来获取类路径下的资源,对应JavaWeb应用的类路径就是classes目录下的资源
具体的代码为:ClassLoader类的getResourceAsStream(Stringpath)。注,ClassLoader对象需要通过Class对象调用.getClassLoader()方法得到。
路径不以“/”开头,相对classes路径;
例如:
InputStream in = this.getClass().getClassLoader().getResourceAsStream("a.jpg");
获取的是:/WEB-INF/classes/a.jpg,即类路径的根目录下的资源,类路径的根目录就是/classes目录
若我想获取src目录下的a.txt中的内容 怎么办呢?
获取src路径下的资源,其实就是 获取类路径下的资源;或者说 若想在类路径下存放文件 在写代码的时候 将这个文件直接放置于src目录下即可。咱们知道,src目录下的文件并不会部署到Tomcat服务器中;只会将这个JavaWeb工程中的WebRoot目录下内容发布到服务器中
src目录下的.java文件会被编译成.class文件 并存放于WebRoot-- WEB-INF – classes 目录下,非.java文件(如 .txt文件)会直接复制于WebRoot – WEB-INF – classes 目录下,展开WebRoot – WEB-INF – classes 目录 或者 项目的工作空间中的对应的目录下
注意,getResourceAsStream(“a.txt”) 其中路径没有以 / 开头,是相对于classes目录。