Tomcat下獲取專案絕對路徑問題
阿新 • • 發佈:2019-02-07
我就想在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
PathServlet.javapublic 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(); } }
來說一下我的測試結果吧,我的後報的錯誤是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來獲取專案路徑比較好,不要用當前類來獲取,很可能出各種莫名其妙的問題。。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); } }