JAVA--IO流

一、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 block
		e.printStackTrace();
	}
	try {
		fr.close();
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.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数组中的字符个数,如果达到文件末尾,返回-1
	 	    char[] 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 block
			e.printStackTrace();
		}finally{
		//4.关闭流
			if(fr!=null){
				
				try {
					fr.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.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 block
				e.printStackTrace();
			}
			try {
				if(fr!=null)
					fr.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.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 exception
			e.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 block
				e.printStackTrace();
			}
		
		}
		
	}
	

}

5.FileOuputStream字节输出流

四、缓冲流(处理流的一种)

作用:提供流的读取、写入的速度

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值