Java文件与IO(二)之字符流

字符流

Reader

用于读取字符流的抽象类。
子类必须实现的方法只有read(char[], int, int) 和close()。但是,多数子类将重写此 处定义的一些方法,以提供更高的效率和/或其他功能。
使用FileReader类进行实例化操作。

Writer

写入字符流的抽象类。
子类必须实现的方法仅有write(char[], int, int)、flush() 和close()。但是,多数子类将重写此处定义的一些方法,以提供更高的效率和/或其他功能。
与OutputStream一样,对文件的操作使用:FileWriter类完成

简单写个小例子来说明用法

字符流读入Reader

    /**
     * 如果操作的是文本类型的文件, 我们建议使用字符流 如果是非文本类型的文件,我们建议使用字节流
     */
    public static void read() {
        File file = new File("test.txt");

        Reader in = null;
        try {
            in = new FileReader(file);
            int len = -1;
            char[] ch = new char[2];
            StringBuffer sb = new StringBuffer();
            while ((len = in.read(ch)) != -1) {
                sb.append(new String(ch, 0, len));
            }
            System.out.println(sb.toString());

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                in.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

字符流的写入Writer

    /**
     * 字节输出流,从程序向文件输出数据
     */
    public static void write() {
        File file = new File("test.txt");
        Writer out = null;
        try {
            out = new FileWriter(file, true);
            String info = "对, 这是你的博客";
            out.write(info);//输出到缓存中,最后关闭的时候
            out.write("\r\n");//输出换行符
            out.flush();//刷新缓存并将文件存入文件中
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                out.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

字节流和字符流的区别

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

总结: 如果你确认你要处理的流是可打印的字符, 那么使用字符流会看上去简单点。如果不确认,那么用字节流总是不会错的。

字节字符转换流

转换流,可以将一个字节流转换为字符流,也可以将一个字符流转换为字节流。
OutputStreamWriter:可以将输出的字符流转换为字节流的输出形式
InputStreamReader : 将输入的字节流转换为字符流输入形式

简单的写个小Demo, 里面的BufferReader方法会在后面阐述

    // 处理字符
    public static String reader(InputStream in) {
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        try {
            return reader.readLine();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
        return null;
    }

以上纯属个人见解, 如有不足之处希望有高人指出, 定感激不尽, 如有喜欢交流学习经验请给我留言谢谢.
原创文章, 转载请注明出处

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值