Stream(流):
表示计算机内存和硬盘之间传输数据的通道;
将硬盘中的数据保存到内存中,叫做读进,输入数据,read;InputStream;输入流
将数据从内存保存到硬盘中,叫做写入,输出数据,write;Out普通Stream;输出流;
1,流的分类:
InputStream,字节输入流;
FileInputStream();ObjectInputStream;
OutputStream,字节输出流:
FileoutputStream();ObjectOutputStream;
Reader,字符输入流:
FileReader();BufferedReader();
Writer,字符输出流:
FileWriter();BufferedWrite();
(1),按数据的方向来分:
输入:将数据从硬盘读入计算机内存;
InputStream;Reader;
输出:将数据从计算机内存写入到硬盘;
OutoutStream;Writer;
(2),按处理数据的类型来分:
字节流:常用于处理非文本文件:图片,声音等;
InputStream;Out普通Stream;
字符流:常用于处理文本文件,尤其是txt文件;
Reader;Writer;
(3),流对象的特点:
都是抽象类,都不能创建对象,要使用其子类;
2,FileInputStream(文件字节输入流):
(1),构造方法:
FileInputStream(String filename):使用文件路径的字符串创建;
FileInputStream(File file):使用文件对象创建;
(2),常用方法:
.read():按直接读取文件;返回读取文件的字节数;
.read(byte[ ] bytes):按创建的字节数组读取数据,返回读取的字节数,读取的数据保存在字符数组中;
.close():关闭流对象,释放资源;
3,FileOutputStream(文件字节输出流):
将计算机内存中的数据写入硬盘中,目的文件可以不存在;
(1),构造方法:
- FileOutStream(String filepath):根据字符串文件路径创建对象,写入时文件符进行覆盖;
- FileOutStream(String filepath,Boolean append):根据字符串文件路径创建对象,append为是否追加;
- FileOutStream(File file):根据文件对象创建文件字节输出流;会进行覆盖;
- FileOutStream(File file,Boolean append):根据文件对象创建文件字节流,append是否追加;
(2),常用方法:
.write(int i):写入一字节;
.write(Byte[] bytes):按字节数组写入;返回值为写入的字节数;
.write(Byte[ ] bytes,int off,int length):按自定义的字节数组输入,off为开始输入的位置,length为输入的数组长度;
.flush():冲刷,将通道中的数据冲刷到目的;
.close():关闭流,并进行冲刷;
4,可以利用FileInputStream和OutoutStream进行文件的复制;
//创建读取源文件的流对象;
FileInputStream fis=new FileInputStream(new File(String sourcefilepath));
//创建输入目的文件的流对象;
FileOutputStream fos=new FileOutStream(new File(String targetfilepath));
//创建Byte[]数组对象,规定每次读取的字节数和写入的字节数;
Byte[] bytes=new Byte[1024*1024*8];
//返回每次保存的字节数,读取到返回字节数,没有读取到返回-1;
int count = fis.read(bytes);
//循环读取数据;
while(count != -1){
//一边读取的数据,一边将数组中的数据写入;
fos.write(bytes);
//下一次读取的数据
count=fis.read(bytes);
}
//必须关闭读取的流对象,这样才能将数据flush(冲刷)到目的地;
fos.close();
//关闭读取流对象;
fis.colse();
5,FileReader(文件字符输入流):
按字符读取文件;
(1),构造方法:
FileReader(String filename):根据文件名字字符串来创建对象;
FileReader(File file):根据文件对象创建文件字符输入流对象;
(2),常用方法:
.ready():在读取的时候判断是否还有下一个字符;
.read():逐个读取字符串;
.read(char[] chars):按照自定义的字符串数组大小读取字符串;
.close():关闭字符输入流;
6,FileWrite(文件字符输出流):
将文件按字符写入;
(1),构造方法:
FileWrite(String filename):按照文件名字的字符串进行对象创建;默认会覆盖;
FileWrite(String filename,Boolean append):按照文件名字的字符串创建对象,当为true的时候可以进行追加,不会覆盖;
FileWrite(File file):根据文件对象创建字符输出流对象,会进行覆盖;
FileWrite(File file,Boolean append):根据文件对象创建字符输出流对象,当Boolean值为true的时候进行追加,不会进行覆盖;
(2),常用方法:
.write(String str):直接将字符串作为参数写入;
.write(char[ ] chars):将字符数组作为参数写入;
.write(String str,int off,int length):一字符串作为参数,off定义读取的开始的位置;length,定义读取的长度;
.write(char[ ] chars):将字符数组作为参数,off定义起始位置,length定义读取的长度;
.flush():冲刷,将流中的数据冲刷到硬盘中;
.close():关闭流对象;在写的完成之后必须要调用flush或者close方法,这样才能将流中的数据冲刷到硬盘中;在调用close()之后时进行自动冲刷;
7,BufferedReader(字符缓冲输入流):
自带数组(缓冲区)的字符输入流;默认数组大小为8192,每次最大读取8192个字符;
(1),构造方法:
BufferedReader(Reader reader):参数为Reader();但是Reader()是一个抽象类不能创建,所以用其子类FileReader()作为对象;然后在FileReader中定义需要读取的文件的信息;
BufferedReader(Reader reader,int size):创建指定大小缓冲区的字节缓冲输入流;
(2),常用方法:
.ready():判断是否还有字符需要读入;
.readeLine():按行读取;
.close():关闭输入流对象;
8,ObjectInputStream(对象字节输入流)(反系列化):
反系列化:将系列化文件转换为对象的过程;
(1),构造方法:
ObjectInputStream(InputStream is):使用InputStream作为对象创建,但是InputStream是抽象类不能创建,就只能使用它的子类FIleInputStream作为对象创建;再在FileInputStream,中定义需要进行反系列化的文件的路径;
(2),
.readeObject():读取经过系列化的文件,再返回对象;
.close():关闭输入流对象;
9,转换流:将字节流转对象换为字符流对象:
InputStreamReader():将读取的字节流转换为字符流;
参数是一个字节输入流对象,FileInputStream;
OutputStreamWriter():将要写入的字节流转换为字符流;
参数是一个字节输出流对象,FileOutputStream;