黑马程序员-----IO流(第五篇)

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

 

1.IO流用来处理设备之间的数据传输

流按操作数据分为字节流与字符流

流按流向分为:输入流,输出流

字节流的抽象基类:InputStreamOutputStream

字符流的抽象基类:ReaderWriter

 

2.FileWrite应用实例

import java.util.*;

import java.io.*;

class  test5
{
       public static void main(String[] args)
       {
              //创建一个FileWriter对象,该文件会被创建到指定目录下
                FileWriter fw=null;
              FileReader fr=null;
              try
              {
                     //传递一个true参数,代表不覆盖已经存在的文件,在文件末尾处进行写
                     fw=new FileWriter("demo.txt",true);
                     fr=new FileReader("demo.txt");
                     fw.write("ab\r\ncde");
                     fw.flush();
                     //逐个读取
       /*           int ch=0;
                     while((ch=fr.read())!=-1)//fr.read(),返回int型数据
                        {
                            System.out.println("ch="+(char)ch);
                     }
                     */
                     //通过字符数组来读取,read(char[])返回的是读到的字符个数。
                        char a[]=new char [3];
                     int num=0;
                     while((num=fr.read(a))!=-1)
                     {
                            System.out.println(new String(a,0,num));
                     }                  
              }
              catch (IOException e)
              {
                     System.out.println("cuowu ");
              }
              finally
              {     
                     try                     {
                            //关闭的前提是,文件被创建
                           if(fw!=null)
                                   fw.close();//关闭流资源,并刷新一次
                            fr.close();
                     }
                     catch (IOException e)
                     {
                            System.out.println(e.toString());
                     }                 
              }
       } 
}


3.字符流的缓冲区

缓冲区的出现提高了对数据的读写效率

对应类:BufferWriter BufferReader

创建缓冲区之前,必须现有流对象。

把需要提高效率的流对象作为参数传递给缓冲区的构造函数即可。

跨平台的换行符,newLine();

BufferReader:字符流读取缓冲区,提供了一次读一行的方法,方便于对文本数据的获取。当返回值为null时,文本结束。

readLine();不返回回车符,其实也是read在一个一个读,到回车符时全部返回

 

4.MyReader//专门用于读取数据的类

装饰模式比继承要灵活,避免继承体系臃肿,降低了类与类之间的关系。

装饰类因为增强已有对象,具备的功能和已有的是相同的,只不过提供了更强的功能,都属于同一体系。

 

5.字节流

InputStream  OutputStream//写入

需求:想要操作图片数据,就要用到字节流

字节流基本操作:

import java.io.*;
class test6 
{
       public static void main(String[] args) throws IOException
       {
              writeFile();
              readFile_1();
              readFile_2();
       }
       public static void writeFile() throws IOException
       {
              FileOutputStream fos=new FileOutputStream("fos.txt",true);
              //字符串变成字节数组
              fos.write("abcde".getBytes());
              fos.close();
       }
       public static void readFile_1() throws IOException
       {
              //定义字节流数组读取
              FileInputStream fis=new FileInputStream("fos.txt");
              byte[] b=new byte[1024];//定义字节数组,不要写成Byte了。
                int num=0;
              while((num=fis.read(b))!=-1)       //没有读到结束时。
                {
                     System.out.println(new String(b,0,num));
              }
                          fis.close();
       }
      public static void readFile_2() throws IOException
       {
              FileInputStream fis=new FileInputStream("fos.txt");
              byte[] b=new byte[fis.available()];//定义一个刚好的自己数组,但是如果是视频等需要太大内存,容易内存泄露
             int num=fis.read(b);            
       /*  while((num=fis.read(b))!=-1) //没有读到结束时。
              {
                     System.out.println(new String(b,0,num));
              }*/
              System.out.println(new String(b,0,num));
              fis.close();
       }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值