Java基础IO流介绍之四——什么是字符流、常用的字符流有哪些

字符流

1、简介

1、概述

char  2个字节 ----->在 jvm中 默认采用的是 unicode编码 占2个字节 

在操作系统中: 
	在所有的编码表中  英文字符都占1个字节 ,汉字 在 GBK中 占2个字节 ,在UTF-8中占 3个字节  

案例:

import java.io.File;
import java.io.FileInputStream;

public class Demo9 {
    public static void main(String[] args) throws Exception{
        //使用字节流  读取  a.txt中的内容
        File file = new File("file/a.txt");
        FileInputStream fileInputStream = new FileInputStream(file);

        //读取 一个字节
//        int read1 = fileInputStream.read();
//        System.out.println((char)read1);
//        int read2 = fileInputStream.read();
//        System.out.println((char)read2);
//        int read3 = fileInputStream.read();
//        System.out.println((char)read3);
        //读取一个字节数组
        byte[] data = new byte[4];
        int len;
        while ((len = fileInputStream.read(data))!=-1){
            System.out.println(new String(data,0,len));
        }
        fileInputStream.close();
    }
}

2、顶级父类

Writer
Reader

3、子类

FileWriter:文件字符输出流
FileReader:文件字符输入流

2、文件字符输出流——FileWriter

2.1、构造方法

FileWriter(File file)
给一个File对象构造一个FileWriter对象。
FileWriter(File file, boolean append)
给一个File对象构造一个FileWriter对象。。
FileWriter(String fileName)
构造一个给定文件名的FileWriter对象。
FileWriter(String fileName, boolean append)
构造一个FileWriter对象,给出一个带有布尔值的文件名,表示是否附加写入的数据。

2.2、常用方法

 void	close()
关闭流,先刷新。
 void	flush()
刷新流。
void	write(char[] cbuf)
写入一个字符数组。
 void	write(char[] cbuf, int off, int len)
写入字符数组的一部分。
void	write(int c)
写一个字符
void	write(String str)
写一个字符串
void	write(String str, int off, int len)
写一个字符串的一部分。
//案例:

import java.io.File;
import java.io.FileWriter;

public class Demo10 {
    public static void main(String[] args) throws Exception{
        //创建字符流对象
//        File file = new File("file/a.txt");
//        FileWriter fileWriter = new FileWriter(file);
        
        FileWriter fileWriter = new FileWriter("file/a.txt");
        
    }
}


//案例2: 

import java.io.File;
import java.io.FileWriter;

public class Demo10 {
    public static void main(String[] args) throws Exception{
        //创建字符流对象
//        File file = new File("file/a.txt");
//        FileWriter fileWriter = new FileWriter(file);

        FileWriter fileWriter = new FileWriter("file/a.txt",true);

//        char c = '刘';
//        fileWriter.write(c);//说明 内部有缓冲区

        String s = "落霞与孤鹜齐飞,秋水共长天一色";
//        char[] chars = s.toCharArray();
//        fileWriter.write(chars);
        fileWriter.write(s);

        fileWriter.flush();
        fileWriter.close();



    }
}

2.3、复制文本文件

案例:

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;

public class Demo12 {
    public static void main(String[] args) throws Exception{
        //创建两个File对象
        File srcFile = new File("file/a.txt");
        File dirFile = new File("dir/a.txt");

        //创建字符流
        FileReader fileReader = new FileReader(srcFile);
        FileWriter fileWriter = new FileWriter(dirFile);

        //一边读一边写
        // 第一种 每次复制一个字符  所用的时间为:4448300纳秒

        long start = System.nanoTime();
//        int data;
//        while ((data = fileReader.read())!=-1){
//            fileWriter.write(data);
//        }

        //第二种 每次复制一个字符数组  608500纳秒
       char[] data = new char[1024*8];
       int len;
//        while ((len = fileReader.read(data))!=-1){
//            fileWriter.write(data,0,len);
//        }

        //第三种
        while ((len = fileReader.read(data))!=-1){
            fileWriter.write(new String(data,0,len));
        }

        long end = System.nanoTime();
        System.out.println("所用的时间为:"+(end - start)+"纳秒");
        fileReader.close();
        fileWriter.close();
    }
}

3、文件字符输入流——FileReader

3.1、构造方法

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

3.2、常用方法

int	read()
读一个字符
int	read(char[] cbuf)
将字符读入数组。
abstract int	read(char[] cbuf, int off, int len)
将字符读入数组的一部分。
//案例: 

import java.io.File;
import java.io.FileReader;

public class Demo11 {
    public static void main(String[] args) throws Exception{
        File file = new File("file/a.txt");
        FileReader fileReader = new FileReader(file);

        //每次可以读取一个字符
//        int read = fileReader.read();//根据当前的编码环境 进行动态的读取
//        System.out.println((char) read);

//        int data ;
//        while ((data = fileReader.read())!=-1){
//            System.out.println((char)data);
//        }
        // 每次读取一个字符数组

        char[] piao = new char[3];
        int len;
//        while (true){
//            len = fileReader.read(piao);
//            if (len == -1){
//                break;
//            }
//            System.out.print(new String(piao,0,len));
//        }

        while ((len = fileReader.read(piao))!=-1){
            System.out.print(new String(piao,0,len));
        }

        fileReader.close();
    }
}

posted @ 2021-06-25 22:16  泰初  阅读(504)  评论(0编辑  收藏  举报