0
点赞
收藏
分享

微信扫一扫

字符流(笔记)

玉新行者 2022-03-30 阅读 43
java学习

一.使用字节输入流读取含有中文的文件

在这里插入图片描述

package com.itheima.demo01Reader;

import java.io.FileInputStream;
import java.io.IOException;

/*
    使用字节输入流读取含有中文的文件
    IDEA中默认的使用的编码表是UTF-8编码表:在UTF-8编码中一个中文占用3个字节
 */
public class Demo01FileInputStream {
    public static void main(String[] args) throws IOException {
        FileInputStream fis = new FileInputStream("day11\\1.txt");
        int len = 0;
        while ((len=fis.read())!=-1){
            //出现了乱码:每次读取一个字节,是中文1/3,把1/3个中文查询编码表转换为字符,找不到,就出现了乱码
            System.out.print((char)len);//ä½ å¥½a
        }
        fis.close();
    }
}

二.字符输入流介绍

三.使用字符输入流读取文件的步骤(重点)

在这里插入图片描述

package com.itheima.demo01Reader;

import java.io.FileReader;
import java.io.IOException;

/*
    使用字符输入流读取文件的步骤(重点)
    1.创建FileReader对象,构造方法中绑定要读取的数据源(文件,文件路径)
    2.使用FileReader对象中的方法read,以字符的方式读取文件
    3.释放资源(关闭该流并释放与之关联的所有资源)
    -----------------------------------------------------
    String类的构造方法:
        String(char[] value) 把字符数组转换为字符串
        String(char[] value, int offset, int count) 把字符数组的一部分转换为字符串
            int offset:开始索引
            int count:转换个数
 */
public class Demo02FileReader {
    public static void main(String[] args) throws IOException {
        //1.创建FileReader对象,构造方法中绑定要读取的数据源(文件,文件路径)
        FileReader fr = new FileReader("day11\\1.txt");
        //2.使用FileReader对象中的方法read,以字符的方式读取文件
        //int read() 读取单个字符并返回
        /*int len = 0;//每次读取到字符
        while ((len=fr.read())!=-1){
            System.out.print((char)len);//你好a
        }*/

        //int read(char[] cbuf)一次读取多个字符
        char[] chars = new char[1024];
        int len = 0;//每次读取字符的有效个数
        while ((len=fr.read(chars))!=-1){
            System.out.println(new String(chars,0,len));//你好a
        }

        //3.释放资源(关闭该流并释放与之关联的所有资源)
        fr.close();
    }
}

四.字符输出流介绍

五.使用字符输出流基本步骤(重点)

在这里插入图片描述

package com.itheima.demo02Writer;

import java.io.FileWriter;
import java.io.IOException;

/*
    使用字符输出流基本步骤(重点)
    1.创建FileWriter对象,构造方法中绑定要写入的目的地(文件,文件路径)
    2.使用FileWriter对象中的方法write,把数据以字符的方式写入到[内存缓冲区中]
    3.使用FileWriter对象中的方法flush,把内存缓冲区中的数据刷新到文件中
    4.释放资源(会自动调用flush方法刷新数据)
 */
public class Demo01FileWriter {
    public static void main(String[] args) throws IOException {
        //1.创建FileWriter对象,构造方法中绑定要写入的目的地(文件,文件路径)
        FileWriter fw = new FileWriter("day11\\2.txt");
        //2.使用FileWriter对象中的方法write,把数据以字符的方式写入到[内存缓冲区中]
        //void write(int c)写入单个字符。
        fw.write(97);
        //3.使用FileWriter对象中的方法flush,把内存缓冲区中的数据刷新到文件中
        fw.flush();
        //4.释放资源(会自动调用flush方法刷新数据)
        fw.close();
    }
}

字节流和字符流的小区别

六.关闭和刷新的区别(面试)

在这里插入图片描述

package com.itheima.demo02Writer;

import java.io.FileWriter;
import java.io.IOException;

/*
    关闭和刷新的区别(面试)
    - flush:把内存缓冲区中的数据刷新到文件中,刷新完之后,流对象可以继续使用
    - close:释放资源,在释放资源之前,把内存缓冲区中的数据刷新到文件中
        刷新完之后,流对象就已经关闭了,就不能在使用了
    问题:
        3.txt文件中有什么?  大家好   
 */
public class Demo02flushAndclose {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("day11\\3.txt");
        fw.write('大');
        fw.flush();
        fw.write('家');
        fw.flush();
        fw.write('好');
        fw.close();
        //fw.write('!');//IOException: Stream closed 流已经关闭了,就不能在使用了
    }
}

七.字符输出流写数据的其他方法(重点)

在这里插入图片描述

package com.itheima.demo02Writer;

import java.io.FileWriter;
import java.io.IOException;

/*
    字符输出流写数据的其他方法(重点)
    public void write(int c) :写出一个字符。
	public void write(char[] cbuf) :写字符数组中的所有字符
	public abstract void write(char[] b, int off, int len) :写字符数组中的一部分字符 off:开始索引 len:写的个数
	public void write(String str) :写出一个字符串
	public void write(String str, int off, int len) 写入字符串的一部分off:开始索引 len:写的个数
 */
public class Demo03FileWriter {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("day11\\4.txt");
        //public void write(int c) :写出一个字符。
        fw.write('a');//a

        //public void write(char[] cbuf) :写字符数组中的所有字符
        char[] chars = {'你','好','@','$','1','2','A','B'};
        fw.write(chars);//你好@$12AB

        //public abstract void write(char[] b, int off, int len) :写字符数组中的一部分字符 off:开始索引 len:写的个数
        //需求:写入字符数组中'1'和'2'这两个字符
        fw.write(chars,4,2);//12

        //public void write(String str) :写出一个字符串
        fw.write("你若安好,便是晴天!");//你若安好,便是晴天!

        //public void write(String str, int off, int len) 写入字符串的一部分off:开始索引 len:写的个数
        //需求:写入字符中的"安好"
        fw.write("你若,便是晴天!",2,2);//安好

        fw.close();
    }
}

八.字符输出流的续写和换行(重点)

在这里插入图片描述

package com.itheima.demo02Writer;

import java.io.FileWriter;
import java.io.IOException;

/*
    和字节流一模一样
    续写:使用两个参数的构造方法
        FileWriter(File file, boolean append)
        FileWriter(String fileName, boolean append)
        参数:
            File file,String fileName:写的目的地
            boolean append:续写开关 true:可以续写 false:不可以
    换行:使用换行符号 \r\n(windows)
 */
public class Demo04FileWriter {
    public static void main(String[] args) throws IOException {
        FileWriter fw = new FileWriter("day11\\5.txt",true);
        for (int i = 1; i <=3 ; i++) {
            fw.write("你好"+i+"\r\n");
        }
        fw.close();
    }
}

九.字符流和字节流的区别(背诵)

举报

相关推荐

0 条评论