欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中的io流—— 字符流

程序员文章站 2024-03-02 16:22:16
...

字节流和字符流的区别:

(1)字节流的处理单位是一个字节,字符流是由Java虚拟机将字节转化为2个字节的Unicode字符为单位的字符而形成的。
(2)字节流在操作时本身不会用到缓冲区,是文件本身直接操作的;而字符流在操作时使用了缓冲区,通过缓冲区再操作文件。
(3)字节流和字符流之间是通过转换流进行转换的(InputStreamReader类是从字节输入流获得数据,然后转换为字符数据交给程序使用;OutputStreamWrite类是将程序输出的字符数据,先转换为字节数据后,再写到输出流中。)
(4)从字节流转化为字符流时,实际上就是byte[]转化为String;字符流转化为字节流时,实际上是String转化为byte[]。
(5) InputStream是所有字节输入流的祖先,而OutputStream是所有字节输出流的祖先。
(6)Reader是所有读取字符串输入流的祖先,而writer是所有输出字符串的祖先。
(7)InputStream,OutputStream,Reader,writer都是抽象类,不能直接new 。

实战——用字符流实现读写操作

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

public class TestInputStreamReader
{
    public static void main(String[] args)
    {
        FileWriter fw=null;
        FileReader fr=null;
        try
        {
            fw=new FileWriter("e:/diary.txt");
            fw.write("鲜衣怒马少年时,不负时光不负卿\n");
            fw.close();
        }
        catch(IOException e)
        {
            System.err.println("流的创建、写和关闭都可能产生IOException异常。");
            System.exit(1);
        }
        try
        {
            fr=new FileReader("e:/diary.txt");
            int i;
            while((i=fr.read()) != -1)
            {
                System.out.print((char) i);
            }
            System.out.println();
            fr.close();
        }
        catch(FileNotFoundException e)
        {
            System.err.println("文件未找到!");
            System.exit(1);
        }
        catch(IOException e)
        {
            System.err.println("读和关闭都可能产生IOException异常。");
            System.exit(1);
        }
    }
}

System.exit(0)是正常退出程序,而System.exit(1)或者说非0表示非正常退出程序。
System.exit(status)不管status为何值都会退出程序。
和return 相比有以下不同点:return是回到上一层,而System.exit(status)是回到最上层

java中的io流—— 字符流
通过字节流和字符流的实战,细心的小伙伴肯定发现了一定的规律:
1 使用File类打开一个文件
2 使用字节流或字符流的子类
3 进行读/写操作
4 关闭输入/输出

相关标签: JAVASE