Tomcat下獲取項目絕對路徑問題

 作者:王奎            歡迎訪問我的網站:www.marksaas.com

昨天看到一篇文章是關於Resin ClassLoader下獲取項目的絕對路徑,原文鏈接:http://coolshell.cn/articles/6112.html

我就想在Tomcat下試一下,結果報了空指針的錯,D:\Tomcat%206\webapps\cloud\WEB-INF\classes\b.txt (系統找不到指定的路徑。)

我先來把原文章的問題和測試代碼來說一下吧。

原文章作者的思路是

  1. 定義一個Servlet,然後在該Servlet中調用Path類的getPath方法,getPath方法返回工程classpath的絕對路徑,顯示在jsp中。
  2. 另外在Path類中,通過Class的getResourceAsStream讀取當前工程classpath路徑中的a.txt文件,寫入到getResource路徑下的b.txt。
  3. 測試代碼如下: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.java
    public 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來獲取項目路徑比較好,不要用當前類來獲取,很可能出各種莫名其妙的問題。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章