前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IO流简要介绍

IO流简要介绍

作者头像
发布2020-10-23 10:26:12
3180
发布2020-10-23 10:26:12
举报
文章被收录于专栏:后端JavaEE

一、什么是IO流?

代码语言:javascript
复制
流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流。流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。IO流的分类:根据处理数据类型的不同分为:字符流和字节流;根据数据流向不同分为:输入流和输出流。
	

IO流基类

	InputStream
			输入流基类
					read
	OutputStream
			输出流基类
					write

1.IO流分类

代码语言:javascript
复制
1.1流向分类:
		输入输出
1.2文件操作处理单元分类:
		字节流和字符流
1.3
	FileInputStream
			文件操作输入字节流
	FileOutputStream
			文件操作输出字节流
1.4
	FileReader
		文件操作输入字符流
	FileWriter
		文件操作输出字符流
2.文件操作输入字节流 FileInputStream

2.1Constructor 构造方法

代码语言:javascript
复制
FileInputStream(File file);
这里是根据提供的File类对象创建对应的文件操作输入字节流。

FileInputStream(String pathName);	
	这里是根据提供的String类型文件路径,创建对应的文件操作输入字节流。
都会抛出异常:
	FileNotFoundException 文件未找到异常。

2.2Method 成员方法

代码语言:javascript
复制
	int read();
		从文件中读取一个字节数据返回到方法外。
		虽然返回值是一个int类型,但是在整个int类型当中存储的数据是一个byte类型,有
		且只有低8位数据有效
		
	int read(byte[] buf);
		读取文件的内容是存储在byte类型数组中,返回值是读取到的字节个数
		
	int read(byte[] buf, int offset, int count);
		读取文件的内容是存储在byte类型数组中,要求从byte数组offset位置开始,到
		count长度结束,返回值是读取到的字节个数
	
	以上三个方法如果读取到文件末尾,返回值都是 -1 EOF End Of File
	而且以上方法都要异常抛出
		IOException IO异常

2.3代码演示:

代码语言:javascript
复制
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

/*
 * 文件操作输入字节流
 * 	1. 确认读取哪一个文件
 * 	2. 创建对应文件的FileInputStream
 * 	3. 读取数据
 * 	4. 关闭资源 【重点】
 */
public class Demo1 {
	public static void main(String[] args) {
		long start = System.currentTimeMillis();
		
		readTest1();
		
		long end = System.currentTimeMillis();
		System.out.println("Time : " + (end - start));
	}

	public static void readTest2() {
		// 1. 确定操作文件
		File file = new File("C:\\aaa\\1.txt");

		// 2. 字节输入流读取文件对象
		FileInputStream fileInputStream = null;
		
		try {
			// 3. 根据File类对象创建对应的字节输入流
			fileInputStream = new FileInputStream(file);
			
			// 4. 准备一个8KB字节缓冲数组
			byte[] buf = new byte[1024 * 8];
			int length = -1;
			
			// 5. 读取数据
			while ((length = fileInputStream.read(buf)) != -1) {
				System.out.println(new String(buf, 0, length));
			}
			
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 在finally代码块中关闭资源
			if (fileInputStream != null) {
				try {
					fileInputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	/*
	 * 不推荐
	 */
	public static void readTest1() {
		// 1. 确定操作文件
		File file = new File("C:\\aaa\\1.txt");
		
		// 2. 字节输入流读取文件对象 
		FileInputStream fileInputStream = null;
	
		try {
			// 3. 根据File类对象创建对应的字节输入流
			fileInputStream = new FileInputStream(file);
			
			// 4. 读取文件 
			int content = -1;
			
			while ((content = fileInputStream.read()) != -1) {
				System.out.println((char)content);
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 用于处理代码中使用到资源,无法发生什么样的错误,finally中的代码一定会执行
			// 这里发现fileInputStream不是null,证明已经打开了文件资源,关闭资源,捕获异常
			if (fileInputStream != null) {
				try {
					fileInputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}
}
3.文件操作输出字节流FileOutputStream

3.1Constructor 构造方法

代码语言:javascript
复制
FileOutputStream(File file);
	根据File类对象创建对应的文件输出字节流对象
FileOutputStream(String pathName);
	根据String类型文件路径创建对应的文件输出字节流对象

以上两个构造方法,创建的FileOutputStream是删除写/清空写操作,会将原文件中的内容全部删除之后,写入数据。

FileOutputStream(File file, boolean append);
	根据File类对象创建对应的文件输出字节流对象。创建对象时给予append参数为
	true,表示追加写。
FileOutputStream(String pathName, boolean append);
	根据String类型文件路径创建对应的文件输出字节流对象,创建对象时给予append参
	数为true,表示追加写。

FileOutputStream构造方法是拥有创建文件的内容,如果文件存在,不创建,文件不存在且路径正确,创建对应文件。否则抛出异常FileNotFoundException

3.2Method 成员方法

代码语言:javascript
复制
void write(int b);
	写入一个字节数据到当前文件中,参数是int类型,但是有且只会操作对应的低八位数
	据
void write(byte[] buf);	
	写入字节数组中的内容到文件中
void write(byte[] buf, int offset, int length);	
	写入字节数组中的内容到文件中,从指定的offset开始,到指定长度length
	
以上方法会抛出异常:IOException

3.3代码演示

代码语言:javascript
复制
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

/*
 * 文件操作输出字节流
 * 		1. 确定文件
 * 		2. 创建FileOutputStream
 * 		3. 写入数据到文件中
 * 		4. 关闭资源 
 */
public class Demo2 {
	public static void main(String[] args) {
		writeTest2();
	}

	public static void writeTest2() {
		// 1. 确定文件
		File file = new File("C:/aaa/中国加油.txt");
		
		// 2. 文件操作字节输出流对象
		FileOutputStream fileOutputStream = null;
		
		try {
			// 3. 创建FileOutputStream 
			fileOutputStream = new FileOutputStream(file);
			
			// 4. 准备byte类型数组
			byte[] bytes = "武汉加油!中国加油!".getBytes();
			byte[] arr = {65, 66, 67, 68, 69, 70, 71};
			
			fileOutputStream.write(bytes);
			fileOutputStream.write(arr, 2, 3);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 关闭资源
			if (fileOutputStream != null) {
				try {
					fileOutputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	}

	public static void wrietTest1() {
		// 1. 确定文件
		File file = new File("C:/aaa/武汉加油.txt");
		
		// 2. 文件操作字节输出流对象
		FileOutputStream fileOutputStream = null;
		try {
			// 3. 创建FileOutputStream
			fileOutputStream = new FileOutputStream(file, true);
			
			// 4. 写入数据
			fileOutputStream.write('D');
			fileOutputStream.write('D');
			fileOutputStream.write('D');
			fileOutputStream.write('D');
			fileOutputStream.write('D');
			fileOutputStream.write('D');
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} finally {
			// 关闭资源
			if (fileOutputStream != null) {
				try {
					fileOutputStream.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}
	} 
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02/26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是IO流?
    • 1.IO流分类
      • 2.文件操作输入字节流 FileInputStream
      • 3.文件操作输出字节流FileOutputStream
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档