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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2024年04月06日 05时34分29秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【C++实现】编译原理 免考小队 FIRSTVT集生成算法
2019-04-26
【建议前端必刷】 用 js 刷LeetCode 算法专题(全)
2019-04-26
【春招&实习&秋招】前端学习の优质资料整理&心路历程(已上岸)
2019-04-26
【手撕原理】面试官:来吧,手写一个简单版的 Promise
2019-04-26
js 实现数组去重 普通项与对象项
2019-04-26
js 让数组展平的 五种 方式
2019-04-26
【亡羊补牢】挑战数据结构与算法 第44期 LeetCode 112. 路径总和(二叉树)
2019-04-26