黑马程序员---黑马IO流学习笔记

来源:互联网 发布:java扫雷小游戏源代码 编辑:程序博客网 时间:2024/05/16 14:37
IO流是用来处理硬盘上文件的数据传输,java对数据处理通过流的方式实现的(java中流操作的类都在IO包)
java流的操作主要有字节流和字符流两种其中字节流的抽象基类InputStream和OutputStream,字符类的抽象基类Reader和Writer
   字符流的操作(Reader和Writer的子类的操作)(在实例化一个文件时如果目录下存在同名的文件,则将文件覆盖掉)
   (一)1、Writer中最重要的方法:append、flush、close、writer
       (1)、append是在输出流中追加相应的内容,其参数为    CharBuffer, Segment, String, StringBuffer, StringBuilder类型或者为char类型
       (2)、flush是将内存流中的数据刷新到文件中
       (3)、close现在刷新内存数据,然后将流关闭
       (4)、writer将内容写入内存输出流中(该方法有几个重载方法实现了想输出流中写入的内容:字符,字符串,可以指定开始和长度的字符串,整型数据     write(int c)是将c对应的字符写入输出流)
     2、Writer的子类    BufferedWriter, CharArrayWriter, FilterWriter, OutputStreamWriter, PipedWriter, PrintWriter, StringWriter
            (1)、OutputStreamWriter 的子类FileWriter类通过File来创建字符输出流;
          FileWriter(String fileName, boolean append)当append为true时将数据写入文件末尾(文件不存在时创建新文件,存在时文件将内容写入文件末尾)
            (2)、BufferedWriter将Writer的功能提高(利用字符流的缓冲技术)提供了newLine(),提供跨平台的换行方法
  (二)1、Reader读取文件中的内容,其中主要的方法:read,close,skip
      (1)、read读取流中的内容,read()一次只读取一个字符,并用int类型来存储,可以强制类型转化为字符;read(char[] ch)读取字符并存入字符串中,返回读取的内容长度
             (2)、close关闭读取流操作
      (3)、skip跳过多少字节在读取文件内容
     2、Reader类的子类主要有BufferedReader,FileReader,InputStreamReader。。。。。。
              (1)、FileReader文件读取流操作过程为:
            //创建一个文件读取流,和指定名的文件相关联
            //要保证文件已存在,如果不存在,将抛出FileNotFoundException
            Reader rd = new FileReader(new File("aa.txt"));
            //调用读取流对象的read方法read()只读取一个字符read(char[] ch)读取字符串,并返回读取的长度read(char[] cbuf, int off, int len)
            //读取一定长度的内容存到buf中
            int i = rd.read();
            //当文件读到最后,返回-1
       (2)、BufferedReader它可以一次读取大量的数据(利用字符流的缓冲技术),读取一行的内容用readline()方法是本类对Reader的扩充
           readLine()读到文件末尾时返回null,这样可以迭代文件中的所有信息(返回一行的有效数据,不包含换行)
           readLine()原理:利用Reader的read()方法将字符一个一个从文件中读取出来,并将其存入一个特定的数组中,如果遇到\r\n将其删除并将数组返回
                   (创建自己的带有缓冲区的reader类:思路就是利用FileReader的read()方法读取数据并将其加入StringBuilder对象中,遇到\r\n时返回StringBuilder对象即可,同时实现流的关闭操作)
      (3)、LineNumberReader是一个带有行号的读取流操作,用getLineNumber方法可以得到行号,也可以用setLineNumber方法设置当前的行号
           
  (三)文件的复制
           主要思想就是源文件读取字符,并将其写入目的文件
     1、可以通过一个字符读取并将其写入目的文件这样经过很多次读取写入
     2、将很多字符限读入内存,一次将很多字符写入目的文件
     3、使用BufferedReader的readLine(),用BufferedWriter的相应操作将一行的数据写入目的文件,可以用newLine()插入一个换行    
   (四)装饰设计模式
            当想要对已有的对象的功能加强,可以定义个类,将已有的类作为成员变量传入到新的类,基于已有的功能,并提供加强的功能的创建  ,这样创建的类为原有类的装饰类
  (五)、字节流的写操作InputStream
       InputStream相当于文件的Reader类(只是它是以字节格式来操作文件,内存),但它提供一个available()表示文件的长度
   (六)、字节流的读操作OutputStream  
        OutputStream从文件中读取内容的类,该类主要以字节的格式写文件或写到内存中
                   注:如何将字符串转化为字节数组,“字符串”.getByte();
      练习:图片,MP3的复制,
      1、图片的复制主要通过文件的字节流操作实现,先从原始文件读取字节,将其写入目标文件
      2、MP3的复制,通过带有缓冲区字节流的MP3文件进行相应的操作,再将缓冲区的内容刷新到目的文件中
      注:在对文件用流操作时,为了却保文件流被正常关闭,应将文件的关闭放在finally里处理
原创粉丝点击