讀取工程下的文件

ServletContext讀取工程下的文件

web工程: 
ServletContext對象讀  
好處:可以讀工程下所有文件,沒有內存溢出問題
獲得 InputStream
獲得 絕對路徑path
java工程:
 類加載的方式讀    
獲得 InputStream
獲得 絕對路徑path
缺點:不適合大文件不能讀類路徑以外的文件
注意的問題: 獲得流的方式檢測不到服務器配置文件的修改,此時需要使用獲得絕對路徑的方式讀   
ServletConfig
如果獲得該對象
思考父類回調的過程
package cn.itcast.context;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletContext4 extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 嚴禁使用絕對路徑
		// 獲得 ServletContext
		ServletContext context = getServletContext();
		
		第一種方法:
		通過相對路徑獲得絕對路徑
		String path = context.getRealPath("/WEB-INF/classes/a.txt");
		
		File file = new File(path);
		
		FileReader fr = new FileReader(file);
		
		System.out.println((char) fr.read());
		
		
		
		第二種方法:
		InputStream in = context.getResourceAsStream("/html/a.html");
		
		byte[] buffer = new byte[100];
		int len = in.read(buffer);
		
		System.out.println(new String(buffer, 0, len));
		
		第三種方法:
		這個方式拿到的時 web路徑 不好用(不推薦使用)
		URL url = context.getResource("/html/a.html");
		
		String path = url.getPath();
		
		System.out.println(path);
		
		
		String path = ServletContext4.class.getClassLoader().getResource("a.txt").getPath();
		
		FileInputStream in = new FileInputStream(path);
		
		System.out.println((char) in.read());
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doGet(request, response);
	}

}

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