java 字符流 Reader和Writer

字节流可以处理MP3,图片,视频,等用二进制存储的数据类型,虽然可以操作强行字符,但会出现各种难以控制的问题

但是不能直接操作Unicode字符,因为一个字符有两个字节,字节流一次只能操作一个字节。

字符流处理的单元为2个字节的Unicode字符,字符流用来操作字符、字符数组或字符串

字符流的介绍

输入字符流Reader继承图:

 抽象类Reader的常用方法:

abstract void close() 关闭字符流释放系统资源
.
int read() 读一个字符,游标后移,返回对应的字符对应的unicode编码,读不到内容返回-1
int read(char[] cbuf) 将内容放入char数组,存放的是字符对应的unicode编码,返回存放字符的个数,读不到内容返回-1

abstract int read(char[] cbuf, int off, int len)读取指定长度的存放到char数组,存放字符对应的unicode编码,读不到内容返回-1

以Reader的子类FileReader来演示:

package IoCharctorTest01;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;


public class IoCharTest01 {
    public static void main(String[] args){
        try (
                FileReader r=new FileReader("test\\test0.txt");
                ){
            /*
            int temp;
            while ((temp=r.read())!=-1){
                System.out.println( (char)temp);
            }
            */

            char [] chars=new char[3];
            int temp;
            while ((temp=r.read(chars))!=-1){
                System.out.println(new String(chars,0,temp) );
            }
            



        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

输出字符流Writer

扫描二维码关注公众号,回复: 4252763 查看本文章

Writer的继承关系图

Writer抽象类的常用方法:
abstract void close(),刷新字符输出流,再关闭它
abstract void flush() 刷新流,保证写入成功
void write(char[] cbuf) 写一个char类型的数组
abstract void write(char[] cbuf, int off, int len)写char数组,根据指定索引和长度
void write(int c)写一个字符,这个字符是int型的unicode编码
void write(String str)写一个字符串
void write(String str, int off, int len)写字符串,根据指定索引和长度
以FileWriter类示例

FileWriter的常用构造方法:

FileWriter(File file)根据给定文件构造FileWriter对象
FileWriter(File file, boolean append)根据给定文件构造FileWriter对象,第2个参数选择是否覆盖原有文件内容
FileWriter(String fileName)根据给定字符串路径构造FileWriter对象
FileWriter(String fileName, boolean append)根据给定字符串路径构造FileWriter对象,第2个参数选择是否覆盖原有文件内容
注意:如果路径不存在,则会在该路径下创建文件

package IoCharctorTest01;

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


public class IoTest02 {
    public static void main(String[] args){
        try (
                FileWriter fw=new FileWriter("test\\test4.txt");
                ){
            fw.write("你好,中国,我们要加油!");
            fw.write(95);

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
out:
test4.txt中的内容如下:
你好,中国,我们要加油!_

应用字符流可以解决字符的乱码问题

用字符流拷贝文本文件可以避免文件中的内容乱码,需要注意的是字符流不能拷贝非文本文件,比如word文档,照片,视频等文件,会出现错误.

示例:

import java.io.*;

public class fileCopy01 {
    public static void main(String[] args){
        try (
                FileReader fr=new FileReader("word.txt") ;
                FileWriter fw=new FileWriter("word1.txt");
                ){
            //通过char数组,复制文件
            char[] chars=new char[5];
            int temp;
            while ((temp=fr.read(chars))!=-1){
                fw.write(chars,0,temp);
            }

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}
out:
源文件内容:
好吗
天天
目标文件内容:
好吗
天天

猜你喜欢

转载自blog.csdn.net/sinat_41132860/article/details/84338785
今日推荐