FileReader和FileWriter流

简介: FileReader和FileWriter流

总结于尚硅谷学习视频

一、流的分类

  • 1.操作数据单位:字节流、字符流
  • 2.数据的流向:输入流、输出流
  • 3.流的角色:节点流、处理流

二、流的体系结构

抽象基类 节点流(文件流) 缓冲流 (处理流的一种)
InputStream FileInputStream (read(byte[] buffer) BufferedInputStream (read(byte[] buffer)
OutputStream FileOutputStream (write(byte[] buffer,0,len) BufferedOutputStream (write(byte[] buffer,0,len) / flush()
Reader FileReader (read(char[] cbuf) BufferedReader (read(char[] cbuf) / readLine()
Writer FileWriter (write(char[] cbuf,0,len) BufferedWriter (write(char[] cbuf,0,len) / flush()



三、一般步骤

 1.实例化File类的对象,指明要操作的文件
 2.提供具体的流
 3.数据的读入
 4.流的关闭操作

四、代码

FileReaderWriterTest类

package com.day0315_2;
import org.junit.jupiter.api.Test;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
/**
 * 一、流的分类
 * 1.操作数据单位:字节流、字符流
 * 2.数据的流向:输入流、输出流
 * 3.流的角色:节点流、处理流
 *
 * 二、流的体系结构
 * 抽象基类               节点流(文件流)                                          缓冲流(处理流的一种)
 * InputStream          FileInputStream (read(byte[] buffer)                BufferedInputStream (read(byte[] buffer)
 * OutputStream         FileOutputStream (write(byte[] buffer,0,len)        BufferedOutputStream (write(byte[] buffer,0,len) / flush()
 * Reader               FileReader (read(char[] cbuf)                       BufferedReader (read(char[] cbuf)  / readLine()
 * Writer               FileWriter (write(char[] cbuf,0,len)                BufferedWriter (write(char[] cbuf,0,len) / flush()
 *
 *
 *
 *
 *
 */
public class FileReaderWriterTest {
    public static void main(String[] args) {
        File file =new File("hello.txt");//相较于当前工程
        System.out.println(file.getAbsoluteFile());
    }
    /*
    将hello.txt文件内容读到程序里面,并输入到控制台
    说明点:
    1.read()的理解:返回读入的一个字符。如果达到文件末尾,返回-1
    2.异常的处理:为了保证流资源一定可以执行关闭操作,需要使用try-catch-finally处理
    3.读入的文件一定要存在,否则就会报FileNotFoundException。
     */
    @Test
    public void testFileReader() {
        FileReader fr= null;
        try {
            //1.实例化File类的对象,指明要操作的文件
            File file =new File("hello.txt");//相较于当前Module
            //2.提供具体的流
            fr = new FileReader(file);
            //3.数据的读入
            //read():返回读入的一个字符。如果达到文件末尾,返回-1
            //方式一
//        int data = fr.read();
//        while(data!=-1){
//            System.out.print((char)data);
//            data = fr.read();
//        }
            //方式二:语法修改
            int data;
            while((data= fr.read())!=-1){
                System.out.println(data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //4.流的关闭操作
            try {
                if (fr!=null) {
                    fr.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    //对read()操作升级:使用read的重载方法
    @Test
    public void testFileReader1(){
        FileReader fr= null;
        try {
            //1.File类的实例化
            File file =new File("hello.txt");
            //2.FileReader流的实例化
            fr = new FileReader(file);
            //3.读入的操作
            //read(char[] cbuf)返回每次读入到字符中的个数,如果达到文件末尾,返回-1
            char[] cbuf=new char[5];
            int len;
            while ((len=fr.read(cbuf))!=-1){
                //方式一
                //错误的helloWorld123ld覆盖之前的数组
//                for (int i=0;i<cbuf.length;i++){
//                    System.out.print(cbuf[i]);
//                }
                //正确的helloWorld123
                for (int i=0;i<len;i++){
                    System.out.print(cbuf[i]);
                }
                //方式二
                //错误的helloWorld123ld
//                String str=new String(cbuf);
//                System.out.println(cbuf);
//                //正确的
//                String str=new String(cbuf,0,len);
//                System.out.print(str);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if(fr!=null)
            //4.资源的关闭
                try {
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
    /*
    从内存中写出数据到硬盘里的文件
    说明
    1.输出操作,对应的File可以不存在的。并不报异常。
    2.
            File对应的硬盘中的文件如果不存在,在输入过程中,会自动创建此文件
            File对应的硬盘中的文件如果存在:
                如果流使用的构造器是:FileWriter(file,false)/FileWriter(file):对原有文件的覆盖
                如果流使用的构造器是:FileWriter(file,true):对原有文件进行追加
     */
    @Test
    public void testFileWrite() {
        FileWriter fw = null;
        try {
            //1.提供FIle类的对象,指明写出的文件
            File file=new File("hello1.txt");
            //2.提供FileWriter的对象,用于数据的写入
            fw = new FileWriter(file,false);
            //3.写出的操作
            fw.write("I have a dream!\n");
            fw.write("you need to have a dream!");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fw!=null)
                try {
                    //4.流资源的关闭
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
    //文件复制,不能处理图片文件
    //不能使用字符流来处理字节流
    @Test
    public void testFileReaderFileWriter(){
        FileReader fr = null;
        FileWriter fw = null;
        try {
            //1.创建File类的对象,指明读入和写出的文件
            File srcFile=new File("hello.txt");
            File destFile=new File("hello2.txt");
            //2.创建输入流和输出流的对象
            fr = new FileReader(srcFile);
            fw = new FileWriter(destFile);
            //3.数据的读入和写出操作
            char [] cbuf=new char[5];
            int len;
            while((len=fr.read(cbuf))!=-1){
                //每次写出len个字符
                fw.write(cbuf,0,len);
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4.关闭流资源
                try {
                    if (fw!=null)
                    fw.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                try {
                    if(fr!=null)
                    fr.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
        }
    }
}
相关文章
|
2月前
|
存储 Java 调度
FileInputStream,FileOutputStream 和 FileReader ,FileWriter 类的基本使用【 File类+IO流知识回顾②】
这篇文章回顾了Java中FileInputStream、FileOutputStream、FileReader和FileWriter类的基本使用方法,包括读取和写入文件的操作,以及字符流和字节流的区别和应用场景。
FileInputStream,FileOutputStream 和 FileReader ,FileWriter 类的基本使用【 File类+IO流知识回顾②】
|
存储
人迹罕至的FileReader
FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。 这边文章主要分4 部分介绍FileReader。
58 0
|
12月前
File操作-FileReader(FileWriter)/BufferedReader(Writer)
File操作-FileReader(FileWriter)/BufferedReader(Writer)
51 0
|
存储 缓存 Java
【Java I/O 流】文件字符输入输出流:FileReader 和 FileWriter
本篇文章主要讲述“文件字符输入流”和“文件字符输出流”两个类的使用,并列举了一些读写案例,帮助学习。
559 0
|
存储 缓存 Java
【Java I/O 流】字符输入输出流:Reader 和 Writer
前面我们已经学会了字节流的使用,本篇开始介绍字符流。字符输入输出流是所有字符流的超类,学会了它们的方法,也基本上掌握了其子类的使用了。
124 0
|
Web App开发 存储 小程序
FileReader详解
FileReader详解
FileReader详解
|
移动开发
字节流InputStream和OutputStream(二)上
字节流InputStream和OutputStream(二)
179 0
字节流InputStream和OutputStream(二)上
BufferedReader和BufferedWriter(七)
以前读取和写入文件内容时,用的Reader和Writer, 当调用 read() 或者 readLine() 方法时,效率是非常慢的。 如果能添加缓冲区,那么就非常好了。 BufferedReader 和 BufferedWriter ,就是在 Reader和 Writer 的基础上,添加了缓冲区, 即不仅具有Reader和Writer的各个功能,还能通过缓冲区进行相应的优化, 其实,这就是装饰器。
152 0
BufferedReader和BufferedWriter(七)