對於JavaWeb而言,獲取類路徑下的資源,就是獲取classes目錄下的資源。
獲取資源的方式有兩種,利用Class或ClassLoader。
Class類的getResourceAsStream(String path):
- 路徑以“/”開頭,相對classes路徑;
- 路徑不以“/”開頭,相對當前class文件所有路徑,例如在cn.sdut.servlet.MyServlet中執行,那么相對/classes/cn/sdut/servlet/路徑;
ClassLoader類的getResourceAsStream(String path):
- 相對classes路徑;
1 public class BServlet extends HttpServlet { 2 3 public void doGet(HttpServletRequest request, HttpServletResponse response) 4 throws ServletException, IOException { 5 //方式一 6 ClassLoader cl = this.getClass().getClassLoader(); 7 InputStream input = cl.getResourceAsStream("a.txt"); 8 // 讀取輸入流轉換成字符串(使用commons-io-2.4.jar) 9 String s = IOUtils.toString(input); 10 System.out.println(s); 11 12 //方式二 13 Class c = this.getClass(); 14 // 路徑前加"/"是相對於classes路徑下 15 InputStream is = c.getResourceAsStream("/a.txt"); 16 // 路徑相對於當前.class文件 17 // InputStream is = c.getResourceAsStream("a.txt"); 18 String str = IOUtils.toString(is); 19 System.out.println(str); 20 21 /* 22 * 使用Class獲取WebRoot目錄下的資源 23 */ 24 // 第一個'/'表示在classes目錄下,'../'表示回到上一級目錄 25 InputStream is1 = c.getResourceAsStream("/../../index.jsp"); 26 String str1 = IOUtils.toString(is1); 27 System.out.println("index:" + str1); 28 } 29 30 }