JavaWeb--(读取本地文件)

一· 读取本地的一个字符

@WebServlet("/streamServlet")
public class streamServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//找到到本地文件的位置(这里a.txt 是放在本项目wencontext下的文件)
		String path = this.getServletContext().getRealPath("a.txt");
		System.out.println(path);
		//读取到本地文件的位置
		FileInputStream in = new FileInputStream(path);
		//读取文件
		System.out.println(in.read());
		System.out.println(in.read());
		System.out.println(in.read());
		System.out.println(in.read());
		System.out.println(in.read());
		//关闭输入流
		in.close();
	}

}

二。利用数组读取多个字符

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//找到到本地文件的位置
		String path = this.getServletContext().getRealPath("a.txt");
		System.out.println(path);
		//读取到本地文件的位置
		FileInputStream in = new FileInputStream(path);
		//读取文件
//		System.out.println(in.read());
//		System.out.println(in.read());
//		System.out.println(in.read());
//		System.out.println(in.read());
//		System.out.println(in.read());
		
		//定义一个数组里面只能放三个字符
		byte[] buffer = new byte[3];
		//第一次读取
		int len = in.read(buffer);
		System.out.println(len);
		System.out.println(Arrays.toString(buffer));
		
		//第二次读取
		len = in.read(buffer);
		System.out.println(len);
		System.out.println(Arrays.toString(buffer));
		
	
		//关闭输入流
		in.close();
	}

注意:a.txt 中的内容有ABCDE。两次读取后的结果如下。是因为每次读三个字符,但是最后的一个数组读到了3个字符,是因为每次读取的时候是把上一次读取到的给覆盖了,所以最后读取到的两个字符只覆盖了2个字符,最后的一个字符还是不变的额

JavaWeb--(读取本地文件)_第1张图片

三。读取整个文件

用上面的方法,写的代码重复性太高,用下面的这种方法可以读取整个文件夹

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//找到到本地文件的位置
		String path = this.getServletContext().getRealPath("a.txt");
		System.out.println(path);
		//读取到本地文件的位置
		FileInputStream in = new FileInputStream(path);
		//读取文件		
		byte[] buffer = new byte[4];
		int len=0;
		while((len=in.read(buffer)) != -1) {
			//把数组转为字符串
			System.out.println(Arrays.toString(buffer));
			//把读取到的转为字符,len表示要读的字符数,
			System.out.println(new String(buffer,0,len));
		}	
		//关闭输入流
		in.close();
	}

四。使用servlet下载文件

JavaWeb--(读取本地文件)_第2张图片


@WebServlet("/downloadServlet")
public class downloadServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//拿到参数
		String para = request.getParameter("filename");
		System.out.println(para);
		
		//使用全局域根据文件名来获取到文件类型
		String mimeType = this.getServletContext().getMimeType(para);
		
		//设置给浏览器响应的文件类型
		response.setContentType(mimeType);
		
		//告诉浏览器以附件的形式下载,不要解析
		response.setHeader("Content-Disposition", "attachment;filename="+para);
		//找到文件的位置
		String path = this.getServletContext().getRealPath("download/"+para);
		
		//加载文件
		FileInputStream in = new FileInputStream(path);
		
		//拿到输出流
		ServletOutputStream out = response.getOutputStream();
		
		byte[] buffer = new byte[1024];
		int len=0;
		while((len=in.read(buffer)) != -1) {
			System.out.println(len);
			System.out.println(Arrays.toString(buffer));
			//写到浏览器中
			out.write(buffer, 0, len);
		}
		in.close();
	}

}

你可能感兴趣的:(javaweb)