字符流数据的写出和读取

写出数据 FileWriter

路径下没有文件,会创建文件,如果该文件已存在,会被覆盖

FileWriter write = new FileWriter(“E:\a.txt”);

写出数据

流程:数据—>缓冲区满了>文件   //缓冲区满了才会将数据写入文件

wirter.write(“abc”);   //当数据比较少,写到缓冲区,缓冲区还没满程序已经结束,所以不会写出数据

冲刷缓冲区,把还未写满数据的缓冲区冲刷出去,数据就会写入文件

writer.flush();

输出流使用完之后,要进行关流操作,以防程序占用内存而导致其它程序不能调用

writer.close();   //关流之前会自动做一次冲刷缓冲区的操作

释放资源

writer = null;

写出数据过程中异常的处理

package cn.jay.exer;
import java.io.FileWriter;
import java.io.IOException;
public class FileWriterDemo {
    public static void main(String[] args) {
    //一、将流对象放到try之外定义并且赋值为null,放到try内创建
    //流对象try外定义是为了防止finally中不能调用writer
        FileWriter writer = null;
        try {
            writer = new FileWriter("E:\a.txt");
            writer.write("abc");
    //四、写完数据之后需要手动冲刷一次缓冲区,防止关流失败后数据在内存中得不到释放
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
    //二、关流之前需要判断是否为空,如果为空,null.close无意义
            if (writer != null)
                try {
                    writer.close();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
    //三、关流之后要将对象强制置为null,释放内存占用
                    writer = null;
                }
        }
    }
}

读取数据 FileReader

FileReader没有缓冲区,需要手动提供一个字符数组作为缓冲区来使用

 

import java.io.FileReader;
import java.io.IOException;
public class FileInputStreamDemo {
    public static void main(String[] args) throws IOException {
       //一次读取一个字符
        FileReader reader = new FileReader("E:\a.txt");
        //定义一个变量用来记录每次读取到的字符
        int i  = -1;
        //该read的返回值表示这一次读取到的字符
        while((i = reader.read()) != -1){
            System.out.println((char)i);
        }
        reader.close();
     /*
     //一次读取多个字符
     FileReader reader = new FileReader("E:\a.txt");
        //设置为每次存储10个字符
        char[] c = new char[10];
        //定义一个变量用来记录每次读取到的字符个数,给变量len赋初值(可以是任意值)
        //防止read读取数据失败导致报错
        int len = -1;
        //该read的返回值表示这一次读取到的字符的个数
        while((len = reader.read(c))!=-1)
            System.out.println(new String(c,0,len));
        reader.close();
     */
  }
}    

 

引入BufferReader之后:

 

FileReader   读取数据

 

BufferReader   提供缓冲区

BufferReader reader = new BufferReader(new FileReader(“E:\a.txt”));   //装饰设计模式
//读取一行数据
//String str = reader.readLine();
//初始化
String str = null;
//读取数据,按行读取,读到null,停止
while((str = reader.readLine()) != null){
  System.out.println(str);
}
//关流
reader.close();

装饰设计模式(FileReaderBufferedReader为例)

利用同类对象(FileReader)构建自己对象本身(BufferedReader),对对象(BufferedReader)身上的功能做了增强或者改善

注:Java中原生的字符流只能操作字符类文件,但不能读取office组件

 

 

原文地址:https://www.cnblogs.com/lj-cn/p/9374338.html