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

重学java 64.IO流 字符流

Action speak louder than words

                                        —— 24.6.5

字符输入流

一、字节流读取中文的问题

1.注意:

        字节流是万能流,这个万能更侧重于文件复制,但是尽量不要边读边看

2.原因:

        UTF-8:一个汉字占三个字节

        GBK:一个汉字占两个字节

        如果按照字节读取,每次读取的字节没有构成一个汉字的字节数,就直接输出,汉字是显示不了的

3.解决:

        将文本文档中的内容,按照字符去操作

        注意:

                ① 按照字符去操作编码也要一致,如果不一致,会乱码

                ② 按照字节流去操作,即使编码一致,边读边看也有可能会乱码

二、FileReader的介绍以及使用

字符流专门操作文本文档的,但是复制操作不要用字符流,要用字节流

1.概述

        字符输入流 —> Reader —> 是一个抽象类

                子类:FileReader

2.作用

        将文本文档中的内容读取到内存中来

3.构造

        FileReader(File file)

        FileReader(String path)

4.方法

        int read() —> 一次读取一个字符,返回的是读取字符对应的int值

        int read(char[] cbuf) —> 一次读取一个字符数组,返回的是读取个数

        int read(char[] cbuf,int off,int len) —> 一次读取一个字符数组一部分,返回的是读取个数

                chuf:读取的数组

                off:读取开始的位置

                len:读取的长度

        void close() —> 关闭资源

import java.io.FileReader;
import java.io.IOException;public class Demo270FileMethod {public static void main(String[] args) throws IOException {method01();method02();// int read(char[] cbuf) —> 一次读取一个字符数组,返回的是读取个数}private static void method02() throws IOException {FileReader fr = new FileReader("AllWillBest_Java/1.txt");char[] buf = new char[3];int len;while ((len = fr.read(buf))!=-1){System.out.println(new String(buf,0,len));}}private static void method01() throws IOException {FileReader fr = new FileReader("AllWillBest_Java/1.txt");// int read() —> 一次读取一个字符,返回的是读取字符对应的intint len;while ((len = fr.read()) != -1) {System.out.print((char)len);}fr.close();}
}

三、FileWriter的介绍以及使用

1.概述:

        字符输出流 —> writer —> 抽象类
        子类:Filewriter

2.作用:

        将数据写到文件中

3.构造:

        Filewriter(File file)

        Filewriter(string fileName)

        FileWriter(string fileName,boolean append)->追加,续写

4.方法

        void write(int c) —> 一次写一个字符

        void write(char[] cbuf) —> 一次写一个字符数组

        void write(char[] cbuf, int off, int len) —> 一次写一个字符数组的一部分

        void write(string str) —> 直接写一个字符串

        void close() —> 关流

5.FileWriter的刷新功能和关闭功能

        void flush() —> 将缓冲区的文件送到文件内,后续流对象才能继续使用(只刷新

        void close() —> 先刷新后关闭,后续流对象不能使用了(刷新且关闭

import java.io.FileWriter;
import java.io.IOException;public class Demo271FileWriter {public static void main(String[] args) throws IOException {method01();}private static void method01() throws IOException {FileWriter fw = new FileWriter("AllWillBest_Java/1.txt");fw.write("我一直相信,");fw.write("苦难是花开的伏笔,");fw.write("流水不争先,争的是滔滔不绝");fw.flush();fw.close();}
}

四、IO流异常处理问题

1.格式

        try{

                }catch{

                 }

2.示例

import java.io.FileWriter;
import java.io.IOException;public class Demo272Exception {public static void main(String[] args) {FileWriter fw = null;try{fw = new FileWriter("AllWillBest_Java\\2.txt");fw.write("一切都会好的");}catch (Exception e){e.printStackTrace();}finally {// 如果fw不为null,证明new出来了,需要ckoseif(fw!=null){try {fw.close();}catch (IOException e) {throw new RuntimeException(e);}}}}
}

五、JDK7之后io异常处理方式

1.格式:

        try(IO对象){
                可能出现异常的代码

        }catch(异常类型 对象名){

                处理异常

        }

2.注意:

        以上格式处理IO异常,会自动关流

3.示例

import java.io.FileWriter;public class Demo273Exception2 {public static void main(String[] args) {try(FileWriter fw = new FileWriter("AllWillBest_Java\\3.txt");){fw.write("我一直相信");}catch (Exception e){e.printStackTrace();}}
}

相关文章:

  • Java SE LTS版本商用收费,有那些开源的替代方案?
  • PDF批量加水印 与 去除水印实践
  • [CAN] 创建解析CAN报文DBC文件教程
  • 大模型算法岗常见面试题100道(含答案)
  • 哲学家进餐问题
  • SSL/TLS和HTTPS
  • mysql的双机热备
  • Linux “ 软件管理 “
  • SHELL脚本学习(七) 脚本控制
  • 免费学习通刷课(免费高分)Pro版
  • American Social Welfware (1600-1940)
  • oracle的bitmap索引是什么
  • 【Python数据魔术】:揭秘类型奥秘,赋能代码创造
  • 2024前端面试准备-HTMLCSS
  • AnythingLLM 的 Docker 使用
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • Apache Pulsar 2.1 重磅发布
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • C++入门教程(10):for 语句
  • EventListener原理
  • Iterator 和 for...of 循环
  • Java比较器对数组,集合排序
  • Java编程基础24——递归练习
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • PAT A1017 优先队列
  • python_bomb----数据类型总结
  • Vue 重置组件到初始状态
  • 百度地图API标注+时间轴组件
  • 学习HTTP相关知识笔记
  • 一份游戏开发学习路线
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • zabbix3.2监控linux磁盘IO
  • 选择阿里云数据库HBase版十大理由
  • ​ ​Redis(五)主从复制:主从模式介绍、配置、拓扑(一主一从结构、一主多从结构、树形主从结构)、原理(复制过程、​​​​​​​数据同步psync)、总结
  • ​业务双活的数据切换思路设计(下)
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • ‌移动管家手机智能控制汽车系统
  • # linux从入门到精通(三)
  • #git 撤消对文件的更改
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • $.ajax()
  • (+4)2.2UML建模图
  • (13):Silverlight 2 数据与通信之WebRequest
  • (4)事件处理——(6)给.ready()回调函数传递一个参数(Passing an argument to the .ready() callback)...
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (Note)C++中的继承方式
  • (Oracle)SQL优化技巧(一):分页查询
  • (windows2012共享文件夹和防火墙设置
  • (编程语言界的丐帮 C#).NET MD5 HASH 哈希 加密 与JAVA 互通
  • (超详细)语音信号处理之特征提取
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)spring boot校园拼车微信小程序 毕业设计 091617
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354