读取工程下的文件

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

}

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