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
缓冲流和转换流的使用【 File类+IO流知识回顾③】
这篇文章介绍了Java中缓冲流(BufferedInputStream, BufferedOutputStream, BufferedReader, BufferedWriter)和转换流(InputStreamReader, OutputStreamWriter)的使用,包括它们的构造方法和如何利用它们提高IO操作的效率及处理字符编码问题。
缓冲流和转换流的使用【 File类+IO流知识回顾③】
|
2月前
|
存储 Java 调度
FileInputStream,FileOutputStream 和 FileReader ,FileWriter 类的基本使用【 File类+IO流知识回顾②】
这篇文章回顾了Java中FileInputStream、FileOutputStream、FileReader和FileWriter类的基本使用方法,包括读取和写入文件的操作,以及字符流和字节流的区别和应用场景。
FileInputStream,FileOutputStream 和 FileReader ,FileWriter 类的基本使用【 File类+IO流知识回顾②】
|
4月前
|
存储 Java
使用OutputStreamWriter写入数据
使用OutputStreamWriter写入数据
|
6月前
|
存储 自然语言处理 Java
day17-缓冲流&转换流&序列化流&打印流&Properties(二)
day17-缓冲流&转换流&序列化流&打印流&Properties
61 1
|
存储
人迹罕至的FileReader
FileReader 对象允许Web应用程序异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。 这边文章主要分4 部分介绍FileReader。
59 0
|
6月前
|
存储
day17-缓冲流&转换流&序列化流&打印流&Properties(一)
day17-缓冲流&转换流&序列化流&打印流&Properties
75 0
File操作-FileReader(FileWriter)/BufferedReader(Writer)
File操作-FileReader(FileWriter)/BufferedReader(Writer)
53 0
|
C语言 C++ 开发者
C++输入流和输出流介绍
C++ 又可以称为“带类的 C”,即可以理解为 C++ 是 C 语言的基础上增加了面向对象(类和对象)。在此基础上,学过 C 语言的读者应该知道,它有一整套完成数据读写(I/O)的解决方案: 使用 scanf()、gets() 等函数从键盘读取数据,使用 printf()、puts() 等函数向屏幕上输出数据; 使用 fscanf()、fgets() 等函数读取文件中的数据,使用 fprintf()、fputs() 等函数向文件中写入数据。 要知道,C 语言的这套 I/O 解决方案也适用于 C++ 程序,但 C++ 并没有“偷懒”,它自己独立开发了一套全新的 I/O 解决方案,其中就包含
|
存储 缓存 Java
【Java I/O 流】文件字符输入输出流:FileReader 和 FileWriter
本篇文章主要讲述“文件字符输入流”和“文件字符输出流”两个类的使用,并列举了一些读写案例,帮助学习。
569 0
|
存储 缓存 Java
【Java I/O 流】字符输入输出流:Reader 和 Writer
前面我们已经学会了字节流的使用,本篇开始介绍字符流。字符输入输出流是所有字符流的超类,学会了它们的方法,也基本上掌握了其子类的使用了。
126 0