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