IO基础(字符流)

IO基础(字符流)

一、字符流

字符流类都是以Reader/Writer结尾

二、常用的字符流类的继承关系

在这里插入图片描述

三、字符流 FileReader 和 FileWriter

FileReader:
如果要从文件中读取内容,可以直接使用 FileReader 子类。
FileReader 是用于读取字符流。 要读取原始字节流,考虑使用 FileInputStream 。

构造方法:
FileReader(File file) 创建一个新的 FileReader ,给出 File 读取。
FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称

FileWriter
如果是向文件中写入内容,应该使用 FileWriter 子类 FileWriter 是用于写入字符流。
要编写原始字节流,考虑使用 FileOutputStream

构造方法:
FileWriter(File file) 给一个File对象构造一个FileWriter对象。
FileWriter(String fileName) 构造一个给定文件名的FileWriter对象

代码如下:

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

public class Test03 {
    public static void main(String[] args) throws IOException {
        //创建输入流对象     
        FileReader fr = new FileReader("E:\\bit\\bitSrc.java");
        //创建输出流对象     
        FileWriter fw = new FileWriter("E:\\bit\\bitCopy.java");
        //读写数据      
        int ch;
        while ((ch = fr.read()) != -1) {
            fw.write(ch);
        }        
        //释放资源      
        fw.close();
        fr.close();
    }
}

四、字符缓冲流 BufferedReader 和 BufferedWriter

为了提高字符流读写的效率,引入了缓冲机制,进行字符批量的读写,提高了单个字符读写的效率。 BufferedReader 用于加快读取字符的速度, BufferedWriter 用于加快写入的速度。
BufferedReader 和 BufferedWriter 类各拥有 8192个 字符的缓冲区。当 BufferedReader在 读取文 本文件时,会先尽量从文件中读入字符数据并放满缓冲区,而之后若使用read()方法,会先从缓冲区中 进行读取。如果缓冲区数据不足,才会再从文件中读取,使用 BufferedWriter 时,写入的数据并不会 先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。

构造方法:
BufferedReader(Reader in) 创建使用默认大小的输入缓冲区的缓冲字符输入 流。
BufferedReader(Reader in, int sz) 创建使用指定大小的输入缓冲区的缓冲字符输入 流。

BufferedWriter(Writer out) 创建使用默认大小的输出缓冲区的缓冲字符输出流。
BufferedWriter(Writer out, int sz) 创建一个新的缓冲字符输出流,使用给定大小的输出缓冲区

测试代码如下:

import java.io.*;

public class FileWrite {
    public static void main(String[] args) throws IOException {
        FileReader reader = new FileReader("C:\\my_java\\aaa.txt");
        BufferedReader bReader = new BufferedReader(reader);
        FileWriter writer = new FileWriter("C:\\my_java\\abc.txt");
        BufferedWriter bWriter = new BufferedWriter(writer);
        String content;     //readLine一行一行的读取
        while ((content = bReader.readLine()) != null) {
            //\r\n换行
            bWriter.write(content + "\r\n");
        }
        reader.close();
        bReader.close();
        bWriter.close();
        writer.close();
    }
}

五、 字符字节转换流(InputStreamReader/OutputStreamWriter)

1、InputStreamReader 是Reader的子类,将输入的字节流转换成字符流。
InputStreamReader 是从字节流到字符流的桥:它读取字节,并使用指定的 charset 将其解码为字符 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。

InputStreamReader构造方法:
InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。
InputStreamReader(InputStream in,Charset cs) 创建一个使用给定字符集的 InputStreamReader

测试代码如下:

import java.io.*;

public class TestDemo {
    public static void main(String[] args) throws IOException {
        // 创建字节流对象 System.in 代表从控制台输入  
        InputStream in = System.in;
        // 创建字符流对象      
        BufferedWriter bw = null;
        BufferedReader br = null;
        try {
            // 实例化字符流对象 通过 InputStreamReader 将字节输入流转化成字符输入流    
            br = new BufferedReader(new InputStreamReader(in));
            //br = new BufferedReader(new InputStreamReader(in,"GBK"));    
            bw = new BufferedWriter(new FileWriter("a.txt"));
            // 定义读取数据的行        
            String line = null;
            // 读取数据          
            while ((line = br.readLine()) != null) {
                // 如果输入的是"exit"就退出        
                if ("exit".equals(line)) {
                    break;
                }// 将数据写入文件    
                bw.write(line);
                // 写入新的一行            
                bw.newLine();
                // 刷新数据缓冲  
                bw.flush();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源        
            if (bw != null)
                bw.close();
            if (br != null) br.close();
        }
    }
}

2、OutputStreamWriter 是Writer的子类,将输出的字符流转换成字节流
OutputStreamWriter 是字符的桥梁流以字节流:向其写入的字符编码成使用指定的字节 charset 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。

OutputStreamWriter构造方法:
OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的 OutputStreamWriter。
OutputStreamWriter(OutputStream out,Charset cs) 创建一个使用给定字符集的 OutputStreamWriter

测试代码如下:

import java.io.*;

public class TestDemo1 {
    public static void main(String[] args) throws IOException { // 定义字节输出流的对象System.out  
        OutputStream out = System.out;
        // 定义字符流的对象      
        BufferedReader br = null;
        BufferedWriter bw = null;
        //通过OutputStreamWriter将字符转流换为字节流对象  
        bw = new BufferedWriter(new OutputStreamWriter(out));
        //bw = new BufferedWriter(new OutputStreamWriter(out,"GBK"));    
        br = new BufferedReader(new FileReader("a.txt"));
        // 定义读取行的字符串        
        String line = null;
        // 读取数据
        while ((line = br.readLine()) != null) {
            // 输出到控制台    
            bw.write(line);
            // 新的一行  
            bw.newLine();
            // 刷新缓冲
            bw.flush();
        }
    }
}
发布了70 篇原创文章 · 获赞 167 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/lzh_99999/article/details/104580550