黑马程序员——自学笔记11(IO流的分类与各种流的创建)

来源:互联网 发布:手机自动报警软件 编辑:程序博客网 时间:2024/06/16 02:14

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

IO流:处理设备之间的数据传输

分类:

        按操作数据分:字节流和字符流

            字节流的抽象基类:InputStream、OutputStream

            字符流的抽象基类:Reader、Writer

        按流向分:写入流和读取流

字符流

    Writer的子类FileWriter

              FileWriter fw=new FileWriter("demo.txt");//创建文件,在编译的位置目录下,也可以指定绝对路径(c:\\abc\\)。若已有该名文件,则覆盖

              fw.write(“abc”);//将字符串写入流中,而不是目的地

              fw.flush();//将字符串刷入目的地中

              fw.close();//关闭数据流,但会先刷入目的地。若已经把所要写入的所有数据都write完了,不再用到流了,可单独用这个方法,不用flush

         文件的续写:

                FileWriter fw=new FileWriter("demo.txt",true);//demo.txt文件已存在,但要是还是没有的话,就会建个新的。true代表允许在demo.txt文件数据后续写

                fw.write(“abc”);

    Reader的子类FileReader

              FileReader fr=new FileReader("demo.txt");//创建一个文件读取流对象,使其与已存在的读取源文件关联

       读取方式一:

              int ch=0;

              while((ch=fr.read())!=-1)//读到末尾,读不到了就返回-1

                 System.out.print((char)ch);

              fr.close();

       读取方式二:

              char[] ch=new char[1024];//定义一个数组,用于存储读到的字符。长度可定义成1024的整数倍

              int num=0;

              while((num=fr.read(ch))!=-1)

                 System.out.print(new String(ch,0,num));

              fr.close();

字符流缓冲区:

    BufferedWriter类:FileWriter fw=new FileWriter("demo.txt");//创建缓冲区之前要先有流对象

                                  BufferedWriter bw=new BufferedWriter(fw);//只要将要提高效率的流对象作为参数传入即可

                                  bw.write(“abc”);

                                  bw.newLine();//跨平台行分隔符方法

                                  bw.flush();//使用缓冲区是要刷新

                                  bw.close();//其实是在关闭流对象

     BufferedReader类:前两步类似上

                                  String line=null;

                                  //一次读取一行

                                  while((line=br.readLine())!=null)

                                          System.out.printlin(line);

IO流的异常处理:

    不管是字符流还是字节流,不管是谁的缓冲区,最后都要关闭,也就是说要放在try-catch-finally语句块的finally里,在之前要判断流是否为空

字节流

    OutputStream:写入字节流

               class FileStream{

                       public static void main(String[] args){

                                writeFile();

                       }

                       public static void writeFile() throws IOException{

                                FileOutputStream fos=new FileOutputStream("fos.txt");//直达目的地,不用刷新

                                fos.write("abc".getBytes);//这是字节流啊

                                fos.close();

                       }

               }

    InputStream类:读取字节流,有三种方式:

             第一种和字符流的一样,第二种也基本相同,只是将字符数组改成字节数组

             第三种可以使用fis.available()方法设置长度刚刚好的自己数组,但这种方法并不好,因为并不知道文件数据到底是多少字节,容易造成内存溢出

To be continue...

----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------

原创粉丝点击