• IO详解


    IO流简单来说就是Input和Output流 ,IO流主要是处理设备之间的数据传输,java对于数据的操作都是通过流来实现的,而java对于操作流的对象都是在IO包中

      按照操作数据划分:

        字节流和字符流  InputStream和Reader    OutputStream和Writer

      按流划分:

        输入流和输出流  InputStream和OutputStream  Writer和Reader

    一 字符流:

      字符流只是用来处理文本数据的,数据最常见的表现形式是文件,字符流用于操作文件的子类一般是FileReader和FileWriter

    注意:

    1. 写入文件后必须要用flush()刷新
    2. 用完流要记得关闭流
    3. 使用流对象要处理IO异常
    4. 定义文件路径可以使用"/"或者"\"
    5. 在创建一个文件时,如果目录下有同名文件讲被覆盖
    6. 读取文件时,要保证该文件存在,否则会出现异常

    创建一个文件,并存入数据:

    FileWriter fw = null;
      try {
    	fw = new FileWriter("D:\IOreview.txt");//明确文件存放的位置
    	fw.write("谢晓飞");//写入数据
    	fw.flush();//刷新,不刷新没有数据
    	fw.write("真帅");//flush刷完还能继续写数据
    	}catch(IOException e) {
    	  e.printStackTrace();
    	}finally {
    	  try {
    		if(fw!=null)fw.close();//close()关闭流资源,关闭之前还会刷新一次,所以不用继续刷
    	}catch(IOException e) {
    		e.printStackTrace();
    	}
    	}
    

      

    效果就是这样的(笑的请厚道一点^_^)

    其中close()和flush()的区别:flush()在刷新之后还能继续输入,但是close()不能在输入

    FileReader中的read()方法  对单个字符和数组进行读取

      字符数组的读取:

    FileReader fr = null;
            try {
                fr = new FileReader("D:\IOreview.txt");//读取具体的文件内容
                char []ch = new char[1024];//创建一个字符数组
                int num = -1;//定义一个整形数据用来判断有没有带数据的末尾
                while((num=fr.read(ch))!=-1) {//当读取到文件的末尾,num的值就会等于-1,并且把内容都存放在ch数组中
                    System.out.println(new String(ch,0,num));
                }
            }catch(IOException e) {
                e.printStackTrace();
            }catch(Exception e) {
                e.printStackTrace();
            }finally {
                try {
                    if(fr!=null)fr.close();
                }catch(IOException e) {
                    e.printStackTrace();
                }
            }

    (承让了啊)

      单个字符的读取:

    FileReader fr = null;
            try {
                fr = new FileReader("D:\IOreview.txt");
                int ch = 0;
                while((ch=fr.read())!=-1) {
                    System.out.print((char)ch);
                }
            }catch(IOException e) {
                e.printStackTrace();
            }finally {
                    try {
                        if(fr!=null)
                            fr.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
            }

    效果同样,就不展示了

    二  字节流

      字节流和字符流的操作基本相同,但是想要操作媒体文件(媒体文件是用字节存储的)

      读写字节流:InputStream(读)输入流  和OutputStream(写)输出流  ps:初学IO这一块我也是懵逼,但是记得他这个是相较于计算机的就好了

      字节流可以不用刷新操作

    操作图片-----复制图片

    FileInputStream fis = null;
            FileOutputStream fos = null;
            try {
                fis = new FileInputStream("D:\zy.jpg");
                fos = new FileOutputStream("D:\xf.jpg");
                byte[] b = new byte[1024];
                int num = -1;
                while((num = fis.read(b))!=-1) {
                    fos.write(b);
                }
            }catch(IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    if(fis!=null)fis.close();
                    if(fos!=null)fos.close();
                }catch(IOException e) {
                    e.printStackTrace();
                }
            }

    阔以的

    三  缓冲区

    为了提高效率,因为出现了缓冲区

    字符流缓冲区:BufferedWriter和BufferedReader

    将需要提高效率的流作为参数存放到缓冲区的构造函数中,早缓冲区中封装一个数组,存入数据后一次性取出来

    BufferedReader:

      读取缓冲区提供了一次读一行的方法readLine(),方便对文本数据的获取

      readLine()只返回回车字符前的字符,不返回回车字符,如果是复制的话,必须加上newLine(),进行换行

      newLine(),是java提供多平台换行符写入操作

    // TODO Auto-generated method stub
            FileReader fr = null;
            BufferedReader bufr = null;
            try {
                fr = new FileReader("D:\IOreview.txt");
                bufr = new BufferedReader(fr);
                String str = null;
                while((str=bufr.readLine())!=null) {
                    System.out.println(str);
                }
            }catch(IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    if(bufr!=null)bufr.close();
                }catch(IOException e) {
                    e.printStackTrace();
                }
            }

    hiahiahiaO(∩_∩)O哈哈~

    FileReader fr = null;
            FileWriter fw = null;
            BufferedWriter bufw = null;
            BufferedReader bufr = null;
            try {
                fr = new FileReader("D:\IOreview.txt");
                fw = new FileWriter("D:\IOreview1.txt");
                bufw = new BufferedWriter(fw);
                bufr = new BufferedReader(fr);
                String str = null;
                while((str = bufr.readLine())!=null) {
                    bufw.write(str);
                    bufw.newLine();
                }
            }catch(IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    if(bufw!=null)bufw.close();
                    if(bufr!=null)bufr.close();
                }catch(IOException e) {
                    e.printStackTrace();
                }
            }

    为了体现换行,所以在IOreview文件中添加了几条语句,所以时间是新的

     

     字节流缓冲区:

    字节流缓冲区字符流缓冲区操作基本是一样的

    BufferedInputStream bufi = null;
            BufferedOutputStream bufo = null;
            FileInputStream fis = null; 
            FileOutputStream fos = null;
            try {
                fis = new FileInputStream("D:\zy.jpg");
                fos = new FileOutputStream("D:\xf1.jpg");
                bufi = new BufferedInputStream(fis);
                bufo = new BufferedOutputStream(fos);
                int num = -1;
                byte []b = new byte[1024];
                while((num = bufi.read(b))!=-1) {
                    bufo.write(b,0,num);
                }
            }catch(IOException e) {
                e.printStackTrace();
            }finally {
                try {
                    if(bufi!=null)bufi.close();
                    if(bufo!=null)bufo.close();
                }catch(IOException e) {
                    e.printStackTrace();
                }
            }

    因为xf.jpg和zy.jpg是复制过来的,所以看xf1.jpg和xf.jpg是一样的就行

    师从毕向东老师,个人认为毕向东老师教的真的挺好的,只是视频可能有些年头了,由于马上准备找工作了,所以吧笔记在博客园写一下,加深一下印象

    那些地方写的不好请指出来,小白再次拜谢了

    共同努力共同进步

    谢谢大家了

  • 相关阅读:
    rabbitmq在ios中实战采坑
    网络七层架构一句话简述
    HystrixCommand实战
    前端SEO技巧
    前端面试-难点问题2-java和javascript的区别
    前端面试题--难点问题
    [微信营销企划之路]003.Access forbidden!
    [Python进阶]001.不定参数
    [安卓基础]011存储数据(中)——sqlite语法介绍
    [JavaWeb基础] 015.Struts2 表单验证框架
  • 原文地址:https://www.cnblogs.com/xiexiaofei/p/11644761.html
Copyright © 2020-2023  润新知