一、IO流什么?
I/O是Input/output的缩写,用于处理设备之间的数据传输。如读/写文件、网络通讯。
java程序中,对于数据的输入、输出是以流(Stream)的方式进行。
Java.io包下提供了各种流类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出数据。
输入Input:读取外部数据(磁盘、光盘等存储设备的数据)到程序内存中。
输出Output:将程序中(内存)数据输出到磁盘、光盘等存储设备中。
二、流的分类
1.按操作的数据单位不同分为:字节流(8bit)图片视频、字符流(16bit)更适合处理文本
2.按数据流的的流向不同分为:输入流、输出流
3.按流的角色的不同分为:节点流、处理流
抽象基类 字节流 字符流
输入流 InputStream Reader
输出流 OutputStream Writer
Java的io流涉及40多个类,都是从4个抽象基类派生的。
由这四个类派生出来的子类名称都是以其父类名作为子类后缀。
抽象基类 节点流(文件流) 缓冲流(处理流的一种)
InputStream FileInputStream BufferedInputStream
OutputStream FileOutputStream BufferedOutputStream
Reader FileReader BufferedReader
Writer FileWriter BufferedWriter
三、节点流(文件流)
1.文件字符输入流FileReader
package com.java01;import java.io.File;
import java.io.FileReader;
import java.io.IOException;public class IoDemo {public static void main(String[] args) {File file=new File("C:/ZStudy/aa.txt");FileReader fr=null;try {fr= new FileReader(file);int data;while((data=fr.read())!=-1){System.out.println();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {fr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
read方法重载read(cbuf)
package com.java01;import java.io.File;
import java.io.FileReader;
import java.io.IOException;public class IoDemo02 {public static void main(String[] args) {//1.File类的实例化File file =new File("C:/ZStudy/aa.txt");//2.流的实例化FileReader fr=null;try {fr=new FileReader(file);//3.读入的详细操作//返回每次读入cbuf数组中的字符个数,如果达到文件末尾,返回-1char[] cbuf=new char[5];int len;while((len=fr.read(cbuf))!=-1){for(int i=0;i<len;i++){System.out.print(cbuf[i]);} }} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{//4.关闭流if(fr!=null){try {fr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}
2.文件字符输出流FileWriter
从内存中写出数据到硬盘的文件里。
1.输出操作,对应的File可以不存在,并不会报异常。
2.File对应的硬盘中的文件如果不存在,在输出的过程中,会自动创建此文件。
File对应的硬盘中的文件如果存在,
如果流使用的构造器是FileWriter(file,false),对原有文件覆盖。
如果流使用的构造器是FileWriter(file,true),不会对原有文件覆盖,而是在原有文件基础上追加内容。
package com.java01;import java.io.File;
import java.io.FileWriter;
import java.io.IOException;public class IoFilewriterDemo {public static void main(String[] args) throws IOException {//1.File类的实例化File file=new File("C:/ZStudy/bb.txt");//2.流的实例化FileWriter fw= new FileWriter(file,false);//3.输出的详细操作fw.write("FileWriter\n");fw.write("FileWriter01");//4.关闭流fw.close();}}
3.使用FileReader、FileWriter对文本实现复制
package com.java01;import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class Copy {public static void main(String[] args) {//1.实例化File类的对象,指明读入和写出的文件File file1= new File("C:/ZStudy/bb.txt");File file2= new File("C:/ZStudy/dd.txt");FileReader fr = null;FileWriter fw = null;try {fr = new FileReader(file1);fw = new FileWriter(file2);//2.实例化FileReader、FileWriter类的对象//3.数据读入和写出的操作char[] cbuf = new char[5];int len;while ((len = fr.read(cbuf)) != -1) {fw.write(cbuf, 0, len);}} catch (Exception e) {// TODO: handle exception}finally{try {if(fw!=null)fw.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}try {if(fr!=null)fr.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
4.FileInputStream字节输入流
对于文本文件(.txt、.java、.c、.cpp)用字符流处理
对于非文本(.jpg、MP3、MP4、avi、doc、ppt)用字节流处理
用字节FileInputStream、FileOuputStream输入输出流实现图片复制
package com.java01;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;public class FileInputOutputStreamDemo {public static void main(String[] args) {File file1= new File("C:/ZStudy/640.png");File file2= new File("C:/ZStudy/641.png");FileInputStream fs=null;FileOutputStream fo=null;try {fs = new FileInputStream(file1);fo = new FileOutputStream(file2);byte[] buff = new byte[5];int len;while ((len = fs.read(buff)) != -1) {fo.write(buff, 0, len);}} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}finally{try {if(fo!=null)fo.close();} catch (IOException e) {// TODO Auto-generated catch block}try {if(fs!=null)fs.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}
5.FileOuputStream字节输出流
四、缓冲流(处理流的一种)
作用:提供流的读取、写入的速度