JavaSE基础九----<IO流 (3)>【字符流,字符缓冲流】

目录

  • 1.字符流
    • 构造方法
    • 简单读写
    • 高效读写
  • 2.字符缓冲流
    • 构造方法



1.字符流


字符流:以字符为单位,所有以Reader和Writer结尾的类.(主要处理字符或字符串,只能读取纯文本文件,字符流处理单元为1个字符。字节流将读取到的字节数据,去指定的编码表中获取对应文字)

Reader:用于读取字符流的抽象类。
Writer:用于写入字符流的抽象类。

  • InputStreamReader:是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。
  • OutputStreamWriter:是字符流到以字节流的桥梁:向其写入的字符编码成使用指定的字节charset 。 它使用的字符集可以由名称指定,也可以被明确指定,或者可以接受平台的默认字符集。

常用类:
字符输入流 FileReader;继承了InputStreamReader.
字符输出流 FileWriter;继承了OutputStreamWriter.


构造方法


字符输入流 FileReader

构造方法 注释
FileReader(File file) 创建一个新的 FileReader ,指定 File读取
FileReader(FileDescriptor fd) 创建一个新的 FileReader ,给定 FileDescriptor读取
FileReader(String fileName) 创建一个新的 FileReader ,给定要读取的文件的名称

指定要输入的文件;当文件不存在,会抛异常

字符输出流 FileWriter

构造方法 注释
FileWriter(File file) 给一个File对象构造一个FileWriter对象
FileWriter(String fileName) 构造一个给定文件名的FileWriter对象
FileWriter(File file, boolean append) 给一个File对象构造一个FileWriter对象注意:这里有个布尔值参数;append;可设置是否追加,选择追加时,每次执行后就不会删除原来的操作(即不会直接覆盖掉原来的内容)
FileWriter(FileDescriptor fd) 构造与文件描述符关联的FileWriter对象
FileWriter(String fileName, boolean append) 构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据

指定要输出的目标文件;当文件不存在时;会自动创建输出的目标文件


注意:字符流只能传输纯文本文件


简单读写


  • public int read( )
    读取一个字符并以整数的形式返回,如果返回-1已到输入流的末尾。

读取一个文本文件:

import java.io.FileReader;
import java.io.IOException;
public class Demo01 {
     
    //这里仅声明异常,在实际中需要捕获异常;
    public static void main(String[] args) throws IOException {
     
        //指定要输入的文件;当文件不存在,会抛异常
        FileReader fr=new FileReader("F:/JAVAIO流练习使用的文件夹/文本文件.txt");
        //public int read()方法进行读取
        //读取一个字符并以整数的形式返回,如果返回-1已到输入流的末尾。
        int r=0;
        while((r= fr.read())!=-1){
     
            //这里使用强制类型转换转为字符输出;
            System.out.println((char)r);
        }
    }
}

效果:

JavaSE基础九----<IO流 (3)>【字符流,字符缓冲流】_第1张图片


输出流写入:

  • public void write(int c)
    向输出流中写入一个字符数据,该字节数据为参数b的16位.
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo02 {
     
    //这里仅声明异常,在实际中需要捕获异常;
    public static void main(String[] args) throws IOException {
     
        //指定要输入的文件;当文件不存在,会抛异常
        FileReader fr=new FileReader("F:/JAVAIO流练习使用的文件夹/文本文件.txt");
        //指定要输出的目标文件;当文件不存在时;会自动创建输出的目标文件,
        FileWriter fw=new FileWriter("F:/JAVAIO流练习使用的文件夹/目标文本文件.txt");
        //public int read()方法进行读取
        //读取一个字符并以整数的形式返回,如果返回-1已到输入流的末尾。
        //public void write(int c)方法进行写入;
        //向输出流中写入一个字符数据,该字节数据为参数b的16位
        int r=0;
        while((r= fr.read())!=-1){
     
           fw.write(r);
        }
        //关闭流;释放系统资源;
        fr.close();
        fw.close();
    }
}

高效读写


类似字节流的高效读写,在读写时,把数据存到数组中,一块一块地传输.

读取方法

  • public int read(char[ ] cbuf)
    读取[一个数组长度的]字符内容并存储到一个数组中,返回实际读取的字符数,如果读取前已到输入流的末尾就返回-1.

  • public void write(char[] cbuf,int off,int len)
    将字符类型的数组中的从指定位置(offset)开始的,length个字符写入到输出流.

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class Demo03 {
     
    //这里仅声明异常,在实际中需要捕获异常;
    public static void main(String[] args) throws IOException {
     
        //指定要输入的文件;当文件不存在,会抛异常
        FileReader fr=new FileReader("F:/JAVAIO流练习使用的文件夹/文本文件.txt");
        //指定要输出的目标文件;当文件不存在时;会自动创建输出的目标文件,
        FileWriter fw=new FileWriter("F:/JAVAIO流练习使用的文件夹/目标文本文件.txt");
        char[] c=new char[10];
        int length=0;
        while((length= fr.read(c))!=-1){
     
            fw.write(c,0,length);
        }
        //关闭流;释放系统资源;
        fr.close();
        fw.close();
    }
}

2.字符缓冲流


封装字符流对象的即为字符缓冲流.

常用类:

缓冲字符输入流 BufferedReader.
缓冲字符输出流 BufferedWriter.


构造方法


缓冲字符输入流 BufferedReader

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

缓冲字符输出流 BufferedWriter

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

类似于字节流的缓冲区;在字符缓冲区的底层,也是默认的具有一个8192个字节长度的数组空间;也可以用构造方法指定这个缓冲区的大小.

缓冲输入流的方法

返回值 方法
void close( ) ;关闭流并释放与之相关联的任何系统资源
Stream lines( );返回一个 Stream ,其元素是从这个 BufferedReader读取的行
void mark(int readAheadLimit) 标记流中的当前位置
boolean markSupported( ) ;判断这个流是否支持mark( )操作;
int read( ) ;读一个字符
int read(char[ ] cbuf, int off, int len) ;将字符读入数组的一部分。
String readLine( ) 读一行文字;当读取到末尾时,会输出null.
boolean ready( )
void reset() 将流重置为最近的标记
long skip(long n) 跳过字符

除了类似于字节流的一个一个读/写存到缓冲区,以及一个数组一个数组读/写存到缓冲区,还可以一行一行地存储到缓冲区(返回值是字符串类型);然后通过输出方法中的写入一串字符串的方法写到缓冲区.

缓冲输出流的方法

返回值 方法
void close( ) , 关闭流,先刷新
void flush( ),刷新流
void newLine( ) ;写一行行分隔符;可达到换行写入的操作
void write(char[ ] cbuf, int off, int len) 写入字符数组的一部分
void write(int c) 写一个字符
void write(String s, int off, int len) 写一个字符串的一部分

一行一行地读写文本文件:

JavaSE基础九----<IO流 (3)>【字符流,字符缓冲流】_第2张图片

import java.io.*;
public class Demo01 {
     
    //这里仅声明异常,在实际中需要捕获异常;
    public static void main(String[] args) throws IOException {
     
        //指定要输入的文件;当文件不存在,会抛异常
        FileReader fr=new FileReader("F:/JAVAIO流练习使用的文件夹/文本文件.txt");
        //创建缓冲输入流对象;
        BufferedReader br=new BufferedReader(fr);
        //指定要输出的目标文件;当文件不存在时;会自动创建输出的目标文件,
        FileWriter fw=new FileWriter("F:/JAVAIO流练习使用的文件夹/目标文本文件.txt");
        //创建缓冲输出流对象;
        BufferedWriter bw=new BufferedWriter(fw);
        String line =null;
        //设置循环,到文本末尾时停止;
        //public String readLine( );一行一行地读取字符;然后存到输入缓冲区;
        while((line=br.readLine())!=null){
     
            //public void write(String str);
            bw.write(line);//每次写入一串字符串;
            //public void newLine();进行换行操作;
            bw.newLine();
        }
        //刷新输出缓冲流;
        bw.flush();
        //关闭流;释放系统资源;
        br.close();
        bw.close();
    }
}

没有进行换行操作时;
目标文件:

在这里插入图片描述

进行了换行操作:
目标文件:

JavaSE基础九----<IO流 (3)>【字符流,字符缓冲流】_第3张图片



你可能感兴趣的:(JavaSE,java,字符串)