五丶 OutputStream 类
compact1, compact2, compact3
java.io
Class OutputStream
java.lang.Object
java.io.OutputStream
All Implemented Interfaces:
Closeable , Flushable , AutoCloseable
已知直接子类:
ByteArrayOutputStream , FileOutputStream , FilterOutputStream , ObjectOutputStream , OutputStream , PipedOutputStream
public abstract class OutputStream
extends Object
implements Closeable, Flushable
这个抽象类是表示字节输出流的所有类的超类。 输出流接收输出字节并将其发送到某个接收器。
需要定义OutputStream子类的应用OutputStream必须至少提供一个写入一个字节输出的方法。
从以下版本开始:
JDK1.0
另请参见:
BufferedOutputStream , ByteArrayOutputStream , DataOutputStream , FilterOutputStream , InputStream , write(int)
五丶 OutputStream.write()
void write(byte[] b, int off, int len)
从指定的字节数组写入 len个字节,从偏移 off开始输出到此输出流。
public void write(byte[] b,
int off,
int len)
throws IOException
从指定的字节数组写入len字节,从偏移off开始输出到此输出流。 write(b, off, len)的一般合同是数组b中的一些字节按顺序写入输出流; 元素b[off]是写入的第一个字节, b[off+len-1]是此操作写入的最后一个字节。
该write的方法OutputStream调用写出在每个字节中的一个参数的写入方法。 鼓励子类覆盖此方法并提供更有效的实现。
如果b是null ,则抛出NullPointerException 。
如果off为负数,或len为负数,或off+len大于数组b的长度,则抛出IndexOutOfBoundsException 。
参数
b - 数据。
off - 数据中的起始偏移量。
len - 要写入的字节数。
异常
IOException - 如果发生I / O错误。 特别地,如果输出流关闭,则抛出IOException 。
八丶 代码解析
//要下载哪一个文件,获取文件名
String fileName = request.getParameter("fileName");
fileName = new String(fileName.getBytes("iso-8859-1"), "utf-8");
System.out.println("fileName:"+fileName);
//找到要下载的这个文件路径 如果项目部署在安装的Tomcat下
//F:\\online\\servlet\\teach\\day01\\soft\\apache-tomcat-7.0.52\\webapps\\Servlet06\\upload
String path = getServletContext().getRealPath("/upload");
System.out.println("path:"+path);
System.out.println("File.separator:"+File.separator);
//文件名需要根据不同的浏览器进行转码,否则如果下载的文件,文件名是中文的话,就好出问题
//attachment:通知浏览器以下载的形势打开这个页面
response.setHeader("Content-Disposition", "attachment;fileName="+getStr(request,fileName));
//输入流
InputStream inputStream = new FileInputStream(path+File.separator+fileName);
//响应输出流
OutputStream outputStream = response.getOutputStream();
int length = 0;
byte[] b = new byte[1024];
while ((length= inputStream.read(b)) != -1) {
outputStream.write(b, 0, length);
outputStream.close();
inputStream.close();
(生成excel)解决getOutputStream() has already been called for this response java getOutputStream()的问题
在jsp中用java语言生成excel时,虽然对功能没有影响,但在后台会报个小错误:getOutputStream() has already been called for this response java getOutputStream()在网上搜了一下,找到了解决办法:out.clear();out=pageContext.pushBody();加上这两行代码就可以了。OutputStream os = response.getOutputStream();WritableWorkbook wwb = Workbook.createWorkbook(os);要加在wwb.close(