小言_互联网的博客

Java — InputStream.read(),response.getOutputStream(),OutputStream().write【IO流】

373人阅读  评论(0)

一丶 FileInputStream类:

Class FileInputStream
java.lang.Object
java.io.InputStream
java.io.FileInputStream
All Implemented Interfaces:
Closeable , AutoCloseable

public class FileInputStream
extends InputStream
A FileInputStream从文件系统中的文件获取输入字节。 什么文件可用取决于主机环境。
FileInputStream用于读取诸如图像数据的原始字节流。 要阅读字符串,请考虑使用FileReader 。

从以下版本开始:
JDK1.0
另请参见:
File , FileDescriptor , FileOutputStream , Files.newInputStream(java.nio.file.Path, java.nio.file.OpenOption…)

二丶 public FileInputStream(String name)

简介:

FileInputStream(String name)
通过打开与实际文件的连接来创建一个 FileInputStream ,该文件由文件系统中的路径名 name命名。

详情:

构造方法详细信息
FileInputStream
public FileInputStream(String name)
throws FileNotFoundException
通过打开与实际文件的连接创建一个FileInputStream文件,该文件由文件系统中的路径名name命名。 创建一个新的FileDescriptor对象来表示此文件连接。
首先,如果有一个安全管理器,它的checkRead方法被调用与name参数作为其参数。

如果命名文件不存在,则是一个目录而不是常规文件,或者由于某些其他原因无法打开读取,因此抛出一个FileNotFoundException 。

参数
name - 与系统相关的文件名。
异常
FileNotFoundException - 如果文件不存在,是一个目录而不是常规文件,或者由于某些其他原因无法打开阅读。
SecurityException - 如果安全管理器存在,并且其 checkRead方法拒绝对该文件的读取访问。
另请参见:
SecurityManager.checkRead(java.lang.String)

三丶 InputStream 类

org.omg.CORBA_2_3.portable
Class InputStream
java.lang.Object
java.io.InputStream
org.omg.CORBA.portable.InputStream
org.omg.CORBA_2_3.portable.InputStream
All Implemented Interfaces:
Closeable , AutoCloseable

public abstract class InputStream
extends InputStream
InputStream提供从流中读取所有映射的IDL类型。 它扩展了org.omg.CORBA.portable.InputStream。 该类定义了为CORBA 2.3添加的新方法。
从以下版本开始:
JDK1.2
另请参见:
InputStream

四丶 InputStream.read(数组)

得到数组的长度

byte[]  b = new byte[1024];
length= inputStream.read(b)

有值就会返回数组长度,没值就会返回-1

五丶 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 。

六丶 OutputStream.close()

简介

close()
关闭此输出流并释放与此流相关联的任何系统资源。

详情

public void close()
throws IOException
关闭此输出流并释放与此流相关联的任何系统资源。 close的一般合同是关闭输出流。 封闭流不能执行输出操作,无法重新打开。
该close的方法OutputStream什么都不做。

Specified by:
close在界面 Closeable
Specified by:
close在界面 AutoCloseable
异常
IOException - 如果发生I / O错误。

七丶 InputStream.close()

同上

八丶 代码解析

//要下载哪一个文件,获取文件名
		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();
	}

转载:https://blog.csdn.net/qq_27494201/article/details/101627166
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场