31.字符流

字符流

FileReader()

读取字节

在这里插入图片描述

package JAVA.JAVASE.IO流;

import java.io.*;

public class 字符流_test {
    public static void main(String[] args) throws IOException {
        //需求 通过字符流读取文件
        //1.创建字符输入流对象
        Reader Reader = new FileReader("F:\\JAVA的学习\\java note\\10.IO流\\test1.txt");为了防止用户给的路径是错误的 这里必须给报异常throws 或者用try catch去处理

        //2.读取
//        int ch1=Reader.read();//49 因为1的asc码就是49 read()读取的就是第1个字符 1 每次程序调用read都会读取下一个字符
//        System.out.println(ch1);
//        int ch2=Reader.read();//50 因为2的asc码就是50 read()读取的就是第2个字符 2
//        System.out.println(ch2);
//        int ch3=Reader.read();//51 因为3的asc码就是51 read()读取的就是第3个字符 3
//        System.out.println(ch3);
//        int ch4=Reader.read();//-1 文件里就123  读取第四次的时候没有读取到就会返回-1
//        System.out.println(ch4);

        //优化上述的读法 用循环改进 不知道循环次数 使用while循环
//        int ch;//用来接收读取到的字符
//        while (Reader.read()!=-1){//因为Reader.read()这个方法会直接读取 如果用来判断 他会直接读取完成 方法中的Reader.read()已经是第二次读取了
//            ch=Reader.read();
//            System.out.println(ch);
//        }
        //应该这样写
        int ch;//用来接收读取到的字符
        while ((ch=Reader.read())!=-1){//直接把ch在条件里赋值 这样的话 就不会每次跳过一个了 同时当读取到-1的时候就不会进入循环也不会打印那个-1

            System.out.println(ch);
        }
        //3.释放资源
        Reader.close();
    }
}

读取字节数组

在这里插入图片描述

FileWriter()

写字节和数组

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iJPUEqwR-1597561475502)(F:\JAVA的学习\java note\图片\image-20200722154103362.png)]

package JAVA.JAVASE.IO流.字符流;

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

public class FileWriter_test1 {
    public static void main(String[] args) throws IOException {
        //1.创建字符输出流对象
        FileWriter fileWriter = new FileWriter("F:\\JAVA的学习\\java note\\10.IO流\\test1.txt");
        //2.写入
        char[] chs = {'A','B','C','D','E','F','G',};
        fileWriter.write(chs);//字符数组全部写入
        fileWriter.write(chs,0,2);//字符数组下标从0开始 写2个
        fileWriter.write("ABCDEFG");//字符串写入
        fileWriter.write('A');//字符写入
        //3.释放资源
        fileWriter.close();
    }
}

FileReader()和FileWriter()字符读写

IO流拷贝文件核心6步

  1. 创建字符输入流对象 关联数据源文件
  2. 创建字符输出流对象 关联目的地文件
  3. 定义变量 记录读取到的内容
  4. 循环读数 直到结束
  5. 把读取到的写入目的地文件中
  6. 释放资源
package JAVA.JAVASE.IO流.字符流;

import java.io.*;

public class FileReaderandFileWriter_test {
    public static void main(String[] args) throws IOException {
        //通过字符流拷贝文件 一次读写一个字符
        //将test1.txt内容复制到test2.txt内

//      1. 创建字符输入流对象 关联数据源文件
        FileReader fileReader = new FileReader("F:\\JAVA的学习\\java note\\10.IO流\\test1.txt");

//      2. 创建字符输出流对象 关联目的地文件
        FileWriter fileWriter = new FileWriter("F:\\JAVA的学习\\java note\\10.IO流\\test2.txt");

//      3. 定义变量 记录读取到的内容
        int ch;

//      4. 循环读数 直到结束
        while ((ch=fileReader.read())!=-1){//fileReader.read()在括号内写入字符数组 返回的才是长度 fileReader.read()不写直接返回读到的数据

            //      5. 把读取到的写入目的地文件中
            fileWriter.write(ch);
        }


//      6. 释放资源
        fileWriter.close();
        fileReader.close();
    }
}

FileReader()和FileWriter()字符数组读写

package JAVA.JAVASE.IO流.字符流;
import java.io.FileReader;
import java.io.IOException;


import java.io.*;

public class FileReaderandFileWriter_test2 {
    public static void main(String[] args) throws IOException {
        //通过字符流拷贝文件 一次读写一个字符
        //将test1.txt内容复制到test2.txt内

//      1. 创建字符输入流对象 关联数据源文件
        FileReader fileReader = new FileReader("F:\\JAVA的学习\\java note\\10.IO流\\test1.txt");

//      2. 创建字符输出流对象 关联目的地文件
        FileWriter fileWriter = new FileWriter("F:\\JAVA的学习\\java note\\10.IO流\\test2.txt");

//      3. 定义变量 记录读取到的内容
        char[] chs = new char[2048];
        int len;



//      4. 循环读数 直到结束
        while ((len=fileReader.read(chs))>0){//fileReader.read()在括号内写入字符数组 返回的才是长度 fileReader.read()不写直接返回读到的数据

            //      5. 把读取到的写入目的地文件中
            fileWriter.write(chs,0,len);
        }


//      6. 释放资源
        fileWriter.close();
        fileReader.close();
    }
}

BufferReader()和BufferWriter()读写

在这里插入图片描述

IO流拷贝文件核心6步

  1. 创建字符缓冲输入流对象 关联数据源文件
  2. 创建字符缓冲输出流对象 关联目的地文件
  3. 定义变量 记录读取到的内容
  4. 循环读数 直到结束
  5. 把读取到的写入目的地文件中
  6. 释放资源

这个方法在底层实现其实还是按照数组 一次是16kb的读写 和上面的数组读写差不多 但是这个已经帮你规定了一次数组的大小

这个数组相当于缓冲区

package JAVA.JAVASE.IO流.字符流;

import java.io.*;

public class BufferReaderAndBufferWriter_test1 {
    public static void main(String[] args) throws IOException {
        //通过字符流拷贝文件 一次读写一个字符
        //将test1.txt内容复制到test2.txt内

//      1. 创建字符缓冲输入流对象 关联数据源文件 里面需要放入new FileReader() 作为构造方法

        BufferedReader br = new BufferedReader(new FileReader("F:\\JAVA的学习\\java note\\10.IO流\\test1.txt"));

//      2. 创建字符缓冲输出流对象 关联目的地文件 里面需要放入new FileWriter() 作为构造方法
        BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\JAVA的学习\\java note\\10.IO流\\test2.txt"));


//      3. 定义变量 记录读取到的内容
        int ch;

//      4. 循环读数 直到结束
        while ((ch=br.read())!=-1){//fileReader.read()在括号内写入字符数组 返回的才是长度 fileReader.read()不写直接返回读到的数据

            //      5. 把读取到的写入目的地文件中
            bw.write(ch);
        }


//      6. 释放资源
        br.close();
        bw.close();
    }

}

BufferReader()和BufferWriter()读写一行

注意:字符流只能拷贝纯文本文件 比如不能拷贝图片文件 这个时候就必须使用字节流

package JAVA.JAVASE.IO流.字符流;

import java.io.*;

public class BufferReaderAndBufferWriter_test2 {
    public static void main(String[] args) throws IOException {
        //通过字符流拷贝文件 一次读写一个字符
        //将test1.txt内容复制到test2.txt内

//      1. 创建字符缓冲输入流对象 关联数据源文件 里面需要放入new FileReader() 作为构造方法

        BufferedReader br = new BufferedReader(new FileReader("F:\\JAVA的学习\\java note\\10.IO流\\test1.txt"));

//      2. 创建字符缓冲输出流对象 关联目的地文件 里面需要放入new FileWriter() 作为构造方法
        BufferedWriter bw = new BufferedWriter(new FileWriter("F:\\JAVA的学习\\java note\\10.IO流\\test2.txt"));


//      3. 定义变量 记录读取到的内容
        String str;

//      4. 循环读数 直到结束
        while ((str = br.readLine()) != null) {//br.readLine()可以读取到一行的字符串 读不到的时候返回的是null 不是-1

            //5. 把读取到的写入目的地文件中
            //注意一个细节 直接写  bw.write(str) 会让复制的字符串少了回车
            //千万别忘记换行 windows系统中换行是/n /r linux系统 /n  mac系统/r
            bw.newLine();//所以java才写了一个newLine() 来根据当前系统给出对应的换行符
            bw.write(str);
        }


//      6. 释放资源
        br.close();
        bw.close();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值