Tomcat下获取项目绝对路径有关问题
Tomcat下获取项目绝对路径问题
昨天看到一篇文章是关于Resin ClassLoader下获取项目的绝对路径,原文链接:http://coolshell.cn/articles/6112.html
我就想在Tomcat下试一下,结果报了空指针的错,D:\Tomcat%206\webapps\cloud\WEB-INF\classes\b.txt (系统找不到指定的路径。)
我先来把原文章的问题和测试代码来说一下吧。
原文章作者的思路是
- 定义一个Servlet,然后在该Servlet中调用Path类的getPath方法,getPath方法返回工程classpath的绝对路径,显示在jsp中。
- 另外在Path类中,通过Class的getResourceAsStream读取当前工程classpath路径中的a.txt文件,写入到getResource路径下的b.txt。
- 测试代码如下:Path.java
public class Path { public String getPath() throws IOException { InputStream is = this.getClass().getResourceAsStream("/a.txt"); File file = new File(Path.class.getResource("/").getPath()+"/b.txt"); OutputStream os = new FileOutputStream(file); int bytesRead = 0; byte[] buffer = new byte[8192]; while ((bytesRead = is.read(buffer, 0, 8192)) != -1) { os.write(buffer, 0, bytesRead); } os.close(); is.close(); return this.getClass().getResource("/").getPath(); } }
PathServlet.javapublic class PathServlet extends HttpServlet { private static final long serialVersionUID = 4443655831011903288L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Path path = new Path(); request.setAttribute("path", path.getPath()); PrintWriter out = response.getWriter(); out.println("Class.getResource('/').getPath():" + path.getPath()); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
来说一下我的测试结果吧,我的后报的错误是D:\Tomcat%206\webapps\cloud\WEB-INF\classes\b.txt (系统找不到指定的路径。)很明显是再读取b.txt是报错了,我们用的是File file=new File(Path.class.getResource("/").getPath()+"/b.txt");来读取b.tex的,结构读取的时候读到D:\Tomcat%206\webapps\cloud\WEB-INF\classes\b.txt上了,正确路径应该是D:\Tomcat\webapps\cloud\WEB-INF\classes\b.txt,不知道怎么加上%206字符了,我然后在网上查,查到当前类用的类加载器好像用的什么代理什么的,我也有点晕,有知道的童鞋欢迎探讨。。 以后再web环境下还是用servlet来获取项目路径比较好,不要用当前类来获取,很可能出各种莫名其妙的问题。。
- 1楼itmyhome昨天 22:40
- 不错,顶
- Re: u0128591935小时前
- 回复itmyhomen多谢支持。。