javaWeb项目下获取当前类的绝对路径

来源:互联网 发布:js模块化概念 编辑:程序博客网 时间:2024/06/05 18:07

在开发中我们经常会对文件进行操作,所以也就经常涉及到文件路径问题。那么在JavaWeb项目中如何获取当前项目或Java类的路径呢?


如下代码是一个简单的Servlet 类:

public class First extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 情况1String realPath = this.getServletContext().getRealPath("");System.out.println(realPath);//  E:\Server\tomcat-6.0.30\webapps\Day003// 情况2ClassLoader classLoader = this.getClass().getClassLoader();String path = classLoader.getResource("").getPath();System.out.println(path);//  /E:/Server/tomcat-6.0.30/webapps/Day003/WEB-INF/classes/}}
由上代码可以得出有两种方法获取当前项目的路径。一是this.getServletContext().getRealPath("");即通过Servlet上下文对象获取路径,该路径指向当前Servlet容器所在位置,也就是当前项目路径;二是通过类加载器获取当前类的路径,在这里特别提醒:所有类的路径都指向  服务器路径/项目名称/WEB-INF/classes/ ,因为项目发布后所有的.class 文件都放在这个目录下。


既然得到了以上信息,那么我们如何来读取项目下的一个文件呢?文件所在位置如下:

操作代码如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {// 情况1//InputStream is = new FileInputStream("1.jpg");// 报错,   java.io.FileNotFoundException: 1.jpg (系统找不到指定的文件。)File file = new File("1.jpg");System.out.println(file.getAbsolutePath());     // E:\Server\tomcat-6.0.30\bin\1.jpg// 情况2String realPath = this.getServletContext().getRealPath("1.jpg");InputStream is2 = new FileInputStream(realPath);// 情况3ClassLoader classLoader = this.getClass().getClassLoader();String path = classLoader.getResource("../../1.jpg").getPath();InputStream is3 = new FileInputStream(realPath);}
由上可知,不能使用InputStream is = new FileInputStream("1.jpg"); 因为web项目发布到服务器后文件目录有所改变。所以只能使用上面的情况2,和情况3进行本项目下的文件操作。

0 0