您的位置:首页 > 汽车 > 时评 > 重学java 64.IO流 字符流

重学java 64.IO流 字符流

2024/12/28 19:51:41 来源:https://blog.csdn.net/m0_73983707/article/details/139455321  浏览:    关键词:重学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();}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com