2020.8.13.Io-字符流

01_字符流

  1. 字符输入流:父类Reader抽象类、(子类)BufferdReader、InputStreamReader、SreingReader
  2. 字符输出流:父类Writer抽象类、(子类)BufferdWriter、InputStreamWriter、SreingWriter
  3. 字符流只能对文本进行读写
  4. 字符流=字节流+编码表
编码:把字符串转换为字节数组。
解码:把字节数组转换成字符串。
乱码:没有用同一张码表。

getBytes(); 采用平台默认的码表进行编码。

getBytes(“GBK”); 自己指定编码表

01.1_转换流OutputStreamWriter的使用

OutputStreamWriter(OutputStream out)

package OutWriterDemo01;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;

public class OutWriterTest01 {
    public static void main(String[] args) throws IOException {
        //创建使用默认字符编码的 OutputStreamWriter。
        //输出流所关联的文件,如果不存在,会自动创建
       OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream("a.txt",true));
        //一次写一个字符
        writer.write('a');
        writer.write('a');
        writer.flush();
        //写一个字符数组
        writer.write(new char[]{'再','也','没','有'});
        writer.write("\r\n");
        //写一个字符串
        writer.write("一杯敬朝阳,一杯敬死亡");
        /*  OutputStreamWriter(OutputStream out, String charsetName)
        创建使用指定字符集的 OutputStreamWriter。*/
        OutputStreamWriter writer1 = new OutputStreamWriter(new FileOutputStream("b.txt"), "UTF-8");
        writer1.write("人潮人海中");
        writer1.flush();
        writer1.close();
        writer.close(); //刷新并关闭。
    }
}

01.2_字符流的5种写数据的方式

public void write(int c) 写一个字符

 writer.write('a');

​ public void write(char[] cbuf) 写一个字符数组

 writer.write(new char[]{'再','也','没','有'});

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

 writer.write(new char[]{'再','也','没','有'},0,2);

​ public void write(String str) 写一个字符串

 writer1.write("人潮人海中");

​ public void write(String str,int off,int len) 写一个字符串的一部分

writer1.write("人潮人海中",0,3);

01.2_InputStreamReader的使用

package InputReadDemo01;

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

public class InputReadTest01 {
    public static void main(String[] args) throws IOException {
        InputStreamReader reader = new InputStreamReader(new FileInputStream("c.txt"));
        char[] chars = new char[1000];
        //一次读取一个字符数组,返回值,返回的是读取到的有效的字符个数
        // int len = reader.read(chars);
        int len = reader.read(chars,0,3);
        System.out.println(len);
        for (char aChar : chars) {
            System.out.println(aChar);
        }

        reader.close();
    }
}

01.3_FileWriter和FileReader复制文本文件

一次读取一个字符,写一个字符来复制文本文件

package CopyDemo02;

import java.io.*;

public class CopyTest01 {
    public static void main(String[] args) throws IOException {
        //一次读取一个字符,写一个字符来复制文本文件
        InputStreamReader in = new InputStreamReader(new FileInputStream("MyTest.java"));
        OutputStreamWriter out= new OutputStreamWriter(new FileOutputStream("C:\\Users\\ShenMouMou\\Desktop\\MyTest.java"));

        int ch=0;
        while ((ch=in.read())!=-1){
            out.write(ch);
            out.flush();
        }

        in.close();
        out.close();
    }
}

一次读写一个字符数组,来复制

package CopyDemo02;

import java.io.*;

public class CopyTest02 {
    public static void main(String[] args) throws IOException {
        //一次读写一个字符数组,来复制
        //一次读取一个字符,写一个字符来复制文本文件
        InputStreamReader in = new InputStreamReader(new FileInputStream("MyTest.java"));
        OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("C:\\Users\\ShenMouMou\\Desktop\\MyTest.java"));

        char[] chars = new char[1000];
        int len=0;
        while ((len=in.read(chars))!=-1){
            // System.out.println("循环次数");
            out.write(chars,0,len);
            out.flush();
        }
        in.close();
        out.close();
    }
}

BufferedWriter写出数据 高效的字符输出流

BufferedReader读取数据 高效的字符输入流

 创建一个使用默认大小输出缓冲区的缓冲字符输出流。*/
 BufferedWriter bout = new BufferedWriter(new FileWriter("d.txt"));
// BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e.txt")));

 BufferedReader  bin= new BufferedReader(new FileReader("MyTest.java"));

 char[] chars = new char[1000];
 int len = 0;
 while ((len = bin.read(chars)) != -1) {
     // System.out.println("循环次数");
     bout.write(chars, 0, len);
     bout.flush();
 }

 bout.close();
 bin.close();

01.3_高效字符流特有的方法

public void newLine():根据系统来决定换行符 具有系统兼容性的换行符

public String readLine():一次读取一行数据 是以换行符为标记的 读到换行符就换行 没读到数据返回null,包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null

BufferedWriter out = new BufferedWriter(new FileWriter("ff.txt"));
// BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("e.txt")));

BufferedReader in = new BufferedReader(new FileReader("MyTest.java"));

//读取一行,写入一行,来复制文件
String line=null;
while ((line=in.readLine())!=null){
    out.write(line);
    out.newLine();
    out.flush();
}

in.close();
out.close();

注意:new FileReader()、new FileWriter()与初始的 InputStreamReader、 OutputStreamWriter用法一样,相当于简写

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有点。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值