1. 程式人生 > >Java中獲取資源文件的方法總結

Java中獲取資源文件的方法總結

tco doget 技術 resource images 磁盤 response linux exception

這裏總結3中方法獲取資源文件的

  • ServletContext
  • Class
  • ClassLoader

文件的位置

技術分享

1. ServletContext

public void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		PrintWriter pw = response.getWriter();
		ServletContext context = this.getServletContext();
		/**
		 * 獲取不同路徑下的資源文件
		 * servletContext是相對於項目的根目錄的,這裏為WebContent
		 */
		InputStream  inputA = context.getResourceAsStream("/a.txt");
		InputStream inputB = context.getResourceAsStream("/WEB-INF/classes/cn/zydev/b.txt");
		InputStream inputC = context.getResourceAsStream("/WEB-INF/classes/c.txt");
		
		/**
		 * 獲取真實的磁盤路徑
		 */
		String realPath = context.getRealPath("/WEB-INF/classes/c.txt");
		
		/**
		 * 獲取指定目錄下的文件(包括目錄,深度為1級)
		 */
		Set<String> rsc = context.getResourcePaths("/WEB-INF");
		String a = IOUtils.toString(inputA);
		String b = IOUtils.toString(inputB);
		String c = IOUtils.toString(inputC);
		pw.print(a+"<br/>");
		pw.print(b+"<br/>");
		pw.print(c+"<br/>");
		pw.print(realPath+"<br/>");
		pw.println(rsc);
	}

  結果顯示:

技術分享

2. ClassLoader

使用ClassLoader是相對於classes的

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		PrintWriter pw = response.getWriter();
		/**
		 * ClassLoader是相對於classes參照的
		 * 第一個斜杠可以不寫,也可以寫成./(熟悉Linux的應該很清楚)
		 */
		ClassLoader cl = this.getClass().getClassLoader();
		InputStream inputA = cl.getResourceAsStream("/../../a.txt");
		InputStream inputB = cl.getResourceAsStream("/cn/zydev/b.txt");
		InputStream inputC = cl.getResourceAsStream("/c.txt");
		String a = IOUtils.toString(inputA);
		String b = IOUtils.toString(inputB);
		String c = IOUtils.toString(inputC);
		pw.print(a+"<br/>");
		pw.print(b+"<br/>");
		pw.print(c+"<br/>");
	}

  得到結果:

技術分享

3. class

路徑前斜杠表示相對於當前的class,不加斜杠相對於classes

protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		PrintWriter pw = response.getWriter();
		Class cs = this.getClass();
		//不加斜杠表示相對於class(CServlet)
		InputStream inputA = cs.getResourceAsStream("../../../../a.txt");
		InputStream inputB = cs.getResourceAsStream("b.txt");
		//加斜杠,相對於classes
		InputStream inputC = cs.getResourceAsStream("/c.txt");
		String a = IOUtils.toString(inputA);
		String b = IOUtils.toString(inputB);
		String c = IOUtils.toString(inputC);
		pw.print(a+"<br/>");
		pw.print(b+"<br/>");
		pw.print(c+"<br/>");
	}

  得到結果:

技術分享

Java中獲取資源文件的方法總結