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)是回到最上层
通过字节流和字符流的实战,细心的小伙伴肯定发现了一定的规律:
1 使用File类打开一个文件
2 使用字节流或字符流的子类
3 进行读/写操作
4 关闭输入/输出
上一篇: Java代码注释规范(动力节点整理)
下一篇: Java数组在内存中的分配