19.IO流(文件和字节流)

IO流

一.

1.什么是IO流?

在工作中,经常回去操作磁盘上的资源,这个过程中实现了数据的输入和输出操作,磁盘上的文件内存之间进行交互,数据的交互需要有一个媒介或者管道,把这个媒介或者管道就称为IO流,也被称为输入输出流 I:Input O:Output

※※总结※※:

输入(read)是输入到内存中
输出(write)是输出到文件(硬盘)里


2.流的作用和原理

流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。


3.IO流的种类:

父类:
在这里插入图片描述

在这里插入图片描述
读取数据的原理:![在这里插入图片描述](https://img-blog.csdnimg.cn/20190727140056307.png)

3.1按流向分:

1)输入流:

  • FileInputStream(继承InputStream抽象类)
    文件字节输入流(操作英文字母等)
  • FileReader(继承Reader抽象类)
    文件字符输入流(操作汉字和英文字母等)

2)输出流

  • FileOutputStream(继承OutputStream抽象类)
    文件字节输出流
  • FileWriter(继承Writer抽象类)
    文件字符输出流

3.2按流的内容分:

1)字节流:

  • FileInputStream文件字节输入流
  • FileOutputStream文件字节输出流

2)字符流:

  • FileReader文件字符输入流
    BufferedReader(常用,继承Reader)缓冲字符输入流
  • FileWriter文件字符输出流
    BufferedWriter(常用,继承Writer)缓冲字符输出流

二.

1.字节输入流:(InputStream抽象类)

方法:

在这里插入图片描述
文件字节输入流(FileInputStream):
在这里插入图片描述

package cn.cc.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

/**
 * @author CC
 * 文件(字节)输入流
 */
public class InputSteamDemo {

	public static void main(String[] args) {
		InputSteamDemo inputSteamDemo = new InputSteamDemo();
		inputSteamDemo.readFile1();
		inputSteamDemo.readFile2();
	}
	
	public void readFile1() {
		FileInputStream fis = null;
		try {
			fis = new FileInputStream("F:\\abc.cui");
			//读取文件内容
			//声明一个字节数组,存放读取的内容
			byte[] content = new byte[1024];
			//读取文件信息
			fis.read(content);
			System.out.println(new String(content));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			try {
				fis.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public void readFile2() {
		//创建文件对象
		File file = new File("F:\\c.cc");
		byte[] aryContent = new byte[(int) file.length()];
		FileInputStream fis = null;
		//创建字节输入流
		try {
			fis = new FileInputStream(file);
			fis.read(aryContent);
			System.out.println(new String(aryContent));
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			if (fis != null) {
				try {
					fis.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

}

2.字节输出流(OutputStream抽象类)

方法:
在这里插入图片描述
在这里插入图片描述

文件字节输出流(FileOutputStream):

package cn.cc.io;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * @author CC
 * 文件(字节)输出流
 */
public class OutPutStreamDemo {

	public static void main(String[] args) {
		OutPutStreamDemo outPutStream = new OutPutStreamDemo();
		outPutStream.writeFile();
	}
	
	public void writeFile() {
		String str = "java is a lanauage! \n hahaha";
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream("F:\\c.ccc");
			fos.write(str.getBytes());
			System.out.println("写入成功!");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}finally {
			if (fos!=null) {
				try {
					fos.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
}

3.字符输入流(Reader抽象类)

BufferedReader缓冲字符输入流(是对Reader的增强,与FileReader一样都继承自Reader)

package cn.cc.io;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

/**
 * @author CC
 * 字符输入流
 * 一行一行的读取
 */
public class BufferedFileReaderDemo {

	public static void main(String[] args) {
		FileReader fr = null;
		BufferedReader br = null;
		
		try {
			fr = new FileReader("F:\\c.cc");
			br = new BufferedReader(fr);//为FileReader的对象fr创建一个缓冲区域
			//读取一行信息,BufferedReader中独有的方法
			String str = br.readLine();
			while(str!=null) {
				System.out.println(str);
				str = br.readLine();
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

4.字符输出流(Writer抽象类)

BufferedWriter缓冲字符输出流(是对Writer的增强,与FileWriter一样都继承自Writer)

package cn.cc.io;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @author CC
 * 字符输出流
 * 一行一行的输出
 */
public class BufferedWriterDemo {

	public static void main(String[] args) {
		FileWriter fw = null;
		BufferedWriter bw = null;
		
		try {
			//续写
			//如果FileWriter("dir",true);的话表示这个文件不会被重新生成,会覆盖。
			//而且写入的内容是从这个文件的结尾开始写入。
			fw = new FileWriter("f:\\a.aa",true);
			bw = new BufferedWriter(fw);//为FileWriter的对象fw创建一个缓冲区域
			//如果文件第一行有信息,则新开辟一行
			//如果第一行没有信息,则直接写入
			bw.newLine();
			//在新行中写入内容
			bw.write("aaaaaaaa");//先写入到缓冲区中
			bw.flush();//刷新到硬盘中
			System.out.println("写入结束!");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值