IO_File类使用:字符输出流与输入流

字符流
1、Writer
字符写入流的抽象类,子类须实现的方法只有write(),flush(),close()
对文件的操作使用:FileWriter类完成

2、Reader
字符输出流的抽象类,子类须实现的方法只有read(),close()
对文件的操作使用:FileReader类完成

3、字符操作流,会自带缓存默认大小为1024字节,在缓存满后或手动刷新缓存或关闭流时会把数据写入文件;
字符流的内部实现还是字节流。

字节流与字符流的区别:
在所有的流操作里,字节永远是最基础的。任何基于字节的操作都是正确的。无论是文本文件还是二进制文件。如果确认流里面
只有可打印的字符,包括英文的和各种国家的文件,也包括中文,那么可以考虑用字符流。由于编码不同,多字节的字符可能占
用多个字节。比如GBK的汉字就占用2个字节,而UTF-8的汉字就占用3个字节。所以,字符流是根据指定的编码,将1个或多个字
节转化为java里面的unicode的字符,然后及逆行操作。

4、如何选择使用字节流还是字符流:
一般操作非文本文件时,使用字节流;操作文本文件时,建议使用字符流。


import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;

public class CharStreamDemo {

    public static void main(String[] args) {
        //out();
        in();
    }
    
    
    /**
         字符输出流
      1、确定文件目标
      2、创建一个文件字符输出流对象
      3、输出到文件的内容
      4、关闭输出流       
    */
    public static void out() {
        //1、确定文件目标
        File file1 = new File("E:\\Java_IO\\hudechao.txt");
        try {
            //2、创建一个文件字符输出流对象
            Writer wr = new FileWriter(file1,true);
            //3、输出到文件的内容
            wr.write(",美女来我家");
            //4、关闭输出流
            wr.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }
    
    
    /**
       字符输入流
     1、确定文件目标
     2、创建一个文件字符输入流对象
     3、套路代码读取文件内容
     4、关闭输入流
      
    */
    public static void in() {
        //1、确定文件目标
        File file2 = new File("E:\\Java_IO\\hudechao.txt");
        try {
            //2、创建一个文件字符输入流对象
            Reader rd = new FileReader(file2);
            
            //3、套路代码读取文件内容
            StringBuilder buf = new StringBuilder();
            char [] chars = new char[1];
            int len = -1;
            while((len=rd.read(chars))!=-1) {       //将文件内容读取到字符数组chars里保存,以字符为单位读取
                buf.append(new String(chars,0,len));//String类的常用方法,new String(char[] chars,int offset,int length)可将字符数组转为字符串        
            }
            
            //4、关闭输入流
            rd.close();
            System.out.println(buf);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        
    }

}

你可能感兴趣的:(IO_File类使用:字符输出流与输入流)