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);
}
}