字符流的读写

 1、什么是字符流

当使用字节流读取文本文件时,可能会有一个小问题。就是遇到中文字符时,可能不会显示完整的字符,那是因为一个中文字符可能占用多个字节存储。所以ava提供一些字符流类,以字符为单位读写数据,专门用于处理文本文件。

 1.1字符输入流

  • public void close():关闭此流并释放与此流相关联的任何系统资源
  • public int read():从输入流读取一个字符。
  • public int read(char[] cbuf) : 从输入流中读取一些字符,并将它们存储到字符数组cbuf中。

 1.2FileReader类

java.io.FileReader 类是读取字符文件的便利类。构造时使用系统默认的字符编码和默认字节缓冲区。

 

import java.io.*;

public class ReaderTest006 {
    public static void main(String[] args) throws IOException {
        //定义File对象
        File f1=new File("D:/a.txt");
        //字符输入流Reader
        Reader in=new FileReader(f1);
        int read=in.read();//所有的中文字符按照一个字符处理,每次读取一个字符,把该字符转换对应的汉字
        System.out.println((char)read);

        int n1=in.read();
        System.out.println((char)n1);
    }
}

 

 

每次只能读写一个字符

 怎么让他读写多个字符呢?

import java.io.*;
import java.util.Arrays;

public class ReaderTest006 {
    public static void main(String[] args) throws IOException {
        //定义File对象
        File f1=new File("D:/a.txt");
        //字符输入流Reader
        Reader in=new FileReader(f1);
        //使用缓冲区读取多个字符
        char[] buffer=new char[10];
        int n=in.read(buffer);//每次最多读取buffer数组长个字符,把读取到的字符存入buffer数组中,返回的是实际读取的字符数
        System.out.println(n);
        System.out.println(Arrays.toString(buffer));
        char[] buffer1=new char[10];
        int n1=in.read(buffer1);//每次最多读取buffer数组长个字符,把读取到的字符存入buffer数组中,返回的是实际读取到的字符数
        System.out.println(n1);
        System.out.println(Arrays.toString(buffer1));
    }
}

结果如下

 通过数组把读取的字符长度扩大

2、字符输出流

java.io.writer 抽象类是表示用于写出字符流的所有类的超类,将指定的字符信息写出到目的地。它定义了字节输出流的基本共性功能方法。

  •  void write(int )写入单个字符
  • void write(char[]cbuf)写入字符数组
  • abstract void write(char[] cbuf,int off,int len)写入字符数组的某一部分,off数组的开始索引len写的字符个数。
  • void write(String str)写入字符串。void write(String str,int off,int en) 写入字符串的某一部分,off字符串的开始索引len写的字符个数
  • void flush()刷新该流的缓冲。
  • void close()关闭此流,但要先刷新它

 

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class WriterTest07 {
    public static void main(String[] args) throws IOException {
        File f2=new File("D:/b.txt");
        if (!f2.exists()){
            f2.createNewFile();
        }

        //定义一个字符输出流,向f2文件写入内容
        Writer out=new FileWriter(f2);

        out.write(97);

        out.write((int)'中');

        char[] ch={'河','南','南','阳','农','业'};
        //out.write(ch);
        out.write(ch,0,2);

        out.write("移动2103班");
        out.write("abcdef",0,3);

        out.flush();//字符输出流有缓冲区的概念,需要刷新缓冲区才更新到硬盘
        out.close();
    }
}

结果为

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值