黑马程序员——IO流(1)

来源:互联网 发布:淘宝代销好吗 编辑:程序博客网 时间:2024/04/29 23:14

流的概念和作用

        流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。

Java IO流类图结构:

从上图可以看到,根据处理的数据类型的不同,分为字符流和字节流。字符流的本质是基于字节流,根据指定的码表可以对字符进行高效的流操作。字节流和字符流的区别:

         (1)读写单位不同:字节流以字节(8bit)为单位,字符流以字符为单位,根据码表映射字符,一次可能读多个字节。

         (2)处理对象不同:字节流处理所有类型的数据(如图片、视频等),而字符流只能处理字符类型的数据。

 结论:只有是处理纯文本数据,就优先考虑使用字符流。除此之外都使用字节流。

字符流:

向硬盘写入数据:

import java.io.*;public class IO_test1 {public static void main(String[] args) {FileWriter fw=null;try {//构造函数public FileWriter(String fileName, boolean append)                            //append - 一个 boolean 值,如果为 true,则将数据写入文件末尾处,而不是写入文件开始处。 即文件的续写fw=new FileWriter("c:\\test.txt",true);fw.write("abcdefg");//flush()刷新流fw.flush();//续写fw.write("hello!");fw.flush();} catch (IOException e) {e.printStackTrace();}finally{//close()关闭流,并刷新,即flushtry {if(fw!=null)fw.close();} catch (IOException e) {e.printStackTrace();}}}}

 

向硬盘读取数据: 

import java.io.*;public class IO_test2 {public static void main(String[] args) {try {FileReader fr=new FileReader("c:\\test.txt");//读取单个字符,直到末尾//readOne(fr);//一次全部读取字符readOnce(fr);} catch (FileNotFoundException e) {e.printStackTrace();}}public static void readOne(FileReader fr){try {int ch=0;while((ch=fr.read())!=-1){System.out.print((char)ch);}} catch (IOException e) {e.printStackTrace();}}public static void readOnce(FileReader fr){//数组存储字符。因为知道文件大小,所以此处定义成了固定数组char[] buff=new char[1024];int num=0;try {while((num=fr.read(buff))!=-1){//将字符数组转成字符串输出System.out.println(new String(buff,0,num));}} catch (IOException e) {e.printStackTrace();}}}

字符流文件的复制:

import java.io.*;public class IO_test3 {public static void main(String[] args) {FileWriter fw=null;FileReader fr=null;try {fr=new FileReader("c:\\test.txt");fw=new FileWriter("d:\\test1.txt");char[] buff=new char[100];int len=0;while((len=fr.read(buff))!=-1){fw.write(buff, 0, len);}} catch (IOException e) {throw new RuntimeException("失败");} finally{if(fw!=null)try {fw.close();} catch (IOException e) {e.printStackTrace();}if(fr!=null)try {fr.close();} catch (IOException e) {e.printStackTrace();}}}}

其实,文件的复制就是一边读一边写,从上边的代码中就可以看出。

0 0