一· 读取本地的一个字符
@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个字符,最后的一个字符还是不变的额
三。读取整个文件
用上面的方法,写的代码重复性太高,用下面的这种方法可以读取整个文件夹
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下载文件
@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();
}
}