重学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()---> 关闭资源

java 复制代码
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() ---> 一次读取一个字符,返回的是读取字符对应的int
        int 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() --->先刷新后关闭,后续流对象不能使用了(刷新且关闭)

java 复制代码
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.示例

java 复制代码
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出来了,需要ckose
            if(fw!=null){
                try {
                    fw.close();
                }catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }
}

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

1.格式:

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

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

处理异常

}

2.注意:

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

3.示例

java 复制代码
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();
        }
    }
}
相关推荐
AI即插即用18 分钟前
即插即用系列(代码实践)专栏介绍
开发语言·人工智能·深度学习·计算机视觉
码农水水26 分钟前
蚂蚁Java面试被问:混沌工程在分布式系统中的应用
java·linux·开发语言·面试·职场和发展·php
喵了meme27 分钟前
c语言经验分享
c语言·开发语言
海边的Kurisu29 分钟前
苍穹外卖日记 | Day4 套餐模块
java·苍穹外卖
毕设源码-邱学长1 小时前
【开题答辩全过程】以 走失儿童寻找平台为例,包含答辩的问题和答案
java
Knight_AL1 小时前
用 JOL 验证 synchronized 的锁升级过程(偏向锁 → 轻量级锁 → 重量级锁)
开发语言·jvm·c#
啊阿狸不会拉杆1 小时前
《数字图像处理》第 4 章 - 频域滤波
开发语言·python·数字信号处理·数字图像处理·频率域滤波
他们叫我技术总监1 小时前
Python 列表、集合、字典核心区别
android·java·python
江沉晚呤时1 小时前
从零实现 C# 插件系统:轻松扩展应用功能
java·开发语言·microsoft·c#
梁下轻语的秋缘2 小时前
ESP32-WROOM-32E存储全解析:RAM/Flash/SD卡读写与速度对比
java·后端·spring