IO流简要介绍
发布日期:2021-10-12 20:08:08 浏览次数:1 分类:技术文章

本文共 5294 字,大约阅读时间需要 17 分钟。

一、什么是IO流?

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

1.IO流分类

1.1流向分类:		输入输出1.2文件操作处理单元分类:		字节流和字符流1.3	FileInputStream			文件操作输入字节流	FileOutputStream			文件操作输出字节流1.4	FileReader		文件操作输入字符流	FileWriter		文件操作输出字符流

2.文件操作输入字节流 FileInputStream

2.1Constructor 构造方法

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

2.2Method 成员方法

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代码演示:

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 构造方法

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 成员方法

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

3.3代码演示

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();				}			}		}	} }

转载地址:https://blog.csdn.net/qq_39773004/article/details/104524252 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:缓冲流简要介绍
下一篇:Object类与它的一些方法

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月06日 05时34分29秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章

【C++实现】编译原理 免考小队 FIRSTVT集生成算法 2019-04-26
php-rabbitmq结合rabbitmq_delayed_message_exchange实现延时队列 2019-04-26
【网络安全实验】解决 ERROR 1064 (42000): You have an error in your SQL syntax ... near … 2019-04-26
【建议前端必刷】 用 js 刷LeetCode 算法专题(全) 2019-04-26
【春招&实习&秋招】前端学习の优质资料整理&心路历程(已上岸) 2019-04-26
【手撕原理】面试官:来吧,手写一个简单版的 Promise 2019-04-26
js 实现数组去重 普通项与对象项 2019-04-26
js 让数组展平的 五种 方式 2019-04-26
【亡羊补牢】挑战数据结构与算法 第35期 LeetCode 22. 括号生成(递归与回溯) 2019-04-26
【亡羊补牢】挑战数据结构与算法 第36期 LeetCode 236. 二叉树的最近公共祖先(二叉树) 2019-04-26
【亡羊补牢】挑战数据结构与算法 第37期 LeetCode 108. 将有序数组转换为二叉搜索树(二叉树) 2019-04-26
【亡羊补牢】挑战数据结构与算法 第38期 LeetCode 450. 删除二叉搜索树中的节点(二叉树)【详解】 2019-04-26
【亡羊补牢】挑战数据结构与算法 第39期 LeetCode 501. 二叉搜索树中的众数(二叉树) 2019-04-26
【亡羊补牢】挑战数据结构与算法 第40期 LeetCode 437. 路径总和 III(二叉树) 2019-04-26
【亡羊补牢】挑战数据结构与算法 第41期 LeetCode 129. 求根到叶子节点数字之和(二叉树) 2019-04-26
【亡羊补牢】挑战数据结构与算法 第42期 LeetCode 257. 二叉树的所有路径(二叉树) 2019-04-26
【亡羊补牢】挑战数据结构与算法 第43期 LeetCode 404. 左叶子之和(二叉树) 2019-04-26
【亡羊补牢】挑战数据结构与算法 第44期 LeetCode 112. 路径总和(二叉树) 2019-04-26
【亡羊补牢】挑战数据结构与算法 第51期 LeetCode 102. 二叉树的层序遍历(二叉树) 2019-04-26
【亡羊补牢】挑战数据结构与算法 第52期 LeetCode 113. 路径总和 II(二叉树) 2019-04-26