1. 程式人生 > >Tomcat下獲取專案絕對路徑問題

Tomcat下獲取專案絕對路徑問題

我就想在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來獲取專案路徑比較好,不要用當前類來獲取,很可能出各種莫名其妙的問題。。