当前位置: 首页 > news >正文

Java--IO--字符流

一、字符流

1.1 字符流概述

  • 字节流能读写任意类型的文件
  • 一个字符可能是一个或者多个字节组成
    • a一个字节
    • 床2个字节
    • 嬴3个字节
  • 使用字节流每次读取一个字节可能会造成读取半个文字
  • 需要一种能按照个数读取数据的流–字符流

1.2 字符输入流

抽象类reader
  • 用于读取字符流的抽象类。
实现类InputStreamReader
FileReader
  • 用来读取字符文件的便捷类。
创建对象
FileReader(String fileName) 在给定从中读取数据的文件名的情况下创建一个新 FileReader。
读取数据
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;public class Demo03 {public static void main(String[] args) throws IOException {/**int read() 读取单个字符。 int read(char[] cbuf) 将字符读入数组。 int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。 */FileReader reader = new FileReader("world.txt");char[] c = new char[4];int len;len = reader.read(c);System.out.println(len);System.out.println(Arrays.toString(c));len = reader.read(c);System.out.println(len);System.out.println(Arrays.toString(c));len = reader.read(c);System.out.println(len);System.out.println(Arrays.toString(c));len = reader.read(c);System.out.println(len);System.out.println(Arrays.toString(c));len = reader.read(c);System.out.println(len);System.out.println(Arrays.toString(c));reader.close();}
}

1.3 字符输出流

抽象类Writer
  • 写入字符流的抽象类。
实现类OutputStreamWriter
FileWriter
  • 用来写入字符文件的便捷类。
创建对象和写入数据
import java.io.FileWriter;
import java.io.IOException;public class Demo01 {public static void main(String[] args) throws IOException {/**FileWriter(String fileName) 根据给定的文件名构造一个 FileWriter 对象。 FileWriter(String fileName, boolean append) 根据给定的文件名以及指示是否附加写入数据的 boolean 值来构造 FileWriter 对象。 */FileWriter writer = new FileWriter("hehe.txt",true);/**void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。 void write(int c) 写入单个字符。 void write(String str, int off, int len) 写入字符串的某一部分。 */writer.write("斯是陋室惟吾德馨。");writer.close();}
}

1.4 使用字符流复制小说

1、创建字符流镀锡
2、循环读写数据
3、关闭流
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;public class Demo02 {public static void main(String[] args) throws IOException {/*** 复制小说*  1、创建流对象*  2、读写数据*  3、关闭流*/// 创建流对象FileReader reader = new FileReader("D:\threeCountry.txt");FileWriter writer = new FileWriter("C:\Users\dushine\Desktop\threeCountry.txt");// 循环读写char[] c = new char[1024];int len = -1;while ((len = reader.read(c)) != -1) {writer.write(c, 0, len);}writer.flush();// 关闭流writer.close();reader.close();System.out.println("OVER");}
}

二、转换流

2.1 概述

  • 解决乱码问题
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;public class Demo01 {public static void main(String[] args) throws IOException {/***  解决乱码*      --UTF-8的格式读取内容*      --GBK的格式写入内容*/// 创建转换流对象InputStreamReader isr = new InputStreamReader(new FileInputStream("Day19笔记--IO.md"), "UTF-8");OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream("Day19笔记--IO-副本.md"), "GBK");// 循环读写char[] c = new char[1024];int len = -1;while ((len = isr.read(c)) != -1) {osw.write(c, 0, len);}// 关闭流osw.close();isr.close();System.out.println("OVER");}
}

三、对象流

3.1 概述

  • 传输对象
  • 发送数据【序列化】
  • 接收数据【反序列化】

3.2 案例

收发JDK内置类型
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;public class Demo01 {public static void main(String[] args) throws IOException {/*** 写入数据*/ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("file"));oos.writeObject(1000);oos.writeObject(3.14);oos.writeObject("Hello");oos.writeObject(true);oos.writeObject(new int[] {11,22,33,44,55});oos.close();System.out.println("OVER");}
}
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;public class Demo02 {public static void main(String[] args) throws ClassNotFoundException, IOException {/*** 读取数据*/// 创建对象流ObjectInputStream ois = new ObjectInputStream(new FileInputStream("file"));// 读取数据System.out.println(ois.readObject());System.out.println(ois.readObject());System.out.println(ois.readObject());System.out.println(ois.readObject());System.out.println(ois.readObject());// 关闭流ois.close();}
}
收发自定义类型
  • 自定义类型需要实现序列化接口
import java.io.Serializable;public class Student implements Serializable{/*** */private static final long serialVersionUID = 3456789091230876L;String name;int age;String address;String info;public Student(String name, int age, String address, String info) {super();this.name = name;this.age = age;this.address = address;this.info = info;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", address=" + address + ", info=" + info + "]";}}
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;public class Demo03 {public static void main(String[] args) throws IOException {ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("stu"));// 发送数据:对象需要实现序列化接口 && 对象中的每一个属性都必须实现序列化接口oos.writeObject(new Student("罗永浩", 42, "东北", "真还传"));oos.close();System.out.println("OVER");}
}
import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;public class Demo04 {public static void main(String[] args) throws ClassNotFoundException, IOException {// 创建输入流ObjectInputStream ois = new ObjectInputStream(new FileInputStream("stu"));// 读取对象Object obj = ois.readObject();System.out.println(obj);ois.close();}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 记录一个lombok和mybatisplus的问题,@Data注解失效
  • 《基层回忆录》第三章:进城
  • 数据结构初阶——算法复杂度超详解
  • VideoPlayer插件的用法
  • 富格林:活用阻挠欺诈套路计策
  • 从零开始搭建 EMQX 集群压测框架
  • linux:有关目录、链接文件的函数 Makefil、gdb的使用
  • Nature Medicine | 常规机器学习构建蛋白质组衰老时钟!对于数学基础不好的同学,好好思考一下这种研究模式如何借鉴?
  • 暨南大学2024年硕士研究生报考录取情况统计表
  • Java面试八股之简述消息队列P2P模型
  • 硬件面试经典 100 题(51~70 题)
  • Collection - LinkedList 源码解读
  • [Windows CMD] 查看网络连接状态 netstat -na | findstr “TCP“
  • 【投融界-注册安全分析报告】
  • 富格林:谨防虚假陷阱杜绝暗箱
  • AHK 中 = 和 == 等比较运算符的用法
  • Android 控件背景颜色处理
  • Cookie 在前端中的实践
  • Git同步原始仓库到Fork仓库中
  • Java方法详解
  • java中的hashCode
  • JDK9: 集成 Jshell 和 Maven 项目.
  • maven工程打包jar以及java jar命令的classpath使用
  • MySQL的数据类型
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 从0到1:PostCSS 插件开发最佳实践
  • 得到一个数组中任意X个元素的所有组合 即C(n,m)
  • 关于List、List?、ListObject的区别
  • 力扣(LeetCode)56
  • 容器服务kubernetes弹性伸缩高级用法
  • 探索 JS 中的模块化
  • 详解NodeJs流之一
  • 追踪解析 FutureTask 源码
  • 《码出高效》学习笔记与书中错误记录
  • (2)从源码角度聊聊Jetpack Navigator的工作流程
  • (javascript)再说document.body.scrollTop的使用问题
  • (SpringBoot)第七章:SpringBoot日志文件
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (十)Flink Table API 和 SQL 基本概念
  • (一)WLAN定义和基本架构转
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)c++ std::pair 与 std::make
  • (转)shell调试方法
  • (转)程序员疫苗:代码注入
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (转)一些感悟
  • (转载)利用webkit抓取动态网页和链接
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .apk文件,IIS不支持下载解决
  • .MyFile@waifu.club.wis.mkp勒索病毒数据怎么处理|数据解密恢复
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .net 发送邮件
  • .Net 执行Linux下多行shell命令方法
  • @EnableAsync和@Async开始异步任务支持