io流

IO技术:
   将内存中的数据存储到持久性设备上,称为写,是向外output
   将持久性设备里的数据读到内存中,称为读,是向内 input

      流按照方向可以分为输入和输出流      字节流:可以操作任何数据       字符流:只能操作纯字符数据
      outputStream 输出流
      inputStream 输入流
      父类为io


io程序书写    1、使用前 导包  IO包中的类
              2、使用前 进行异常的处理
              3、使用后 释放资源


 字节流:
     
 1、文件输出流:FileoutputStream
     方法:write(byte[] b)   write(byte[],int off,int len)   write(int b)  将指定的数据写到此文件输出流
           close()  关闭流
       public static void main(String[] ages){
             //创建文件输出流对象   绑定数据目的地
           FileOutputStream file=new FileOutputStream("d:\\aaa.txt");
              //调用write方法  写一个字节
           file.write(97);
              //写一个字节数组
           byte[] b={78,97,97,67};
            file.write(b);
              //写一个数组的一部分
           file.write(b,1,2);       write(数组名,起始位置,长度);
             //写字符串  getBytes()  字符串转字节
            file.write("hello world".getBytes());
            //关闭流
            file.close();
        }
      ////换行(\r\n)和续写(true)
          File file=new File("d:\\1.txt");
          FileOutputStream fos=new FileOutputStream(file,true);//true以后内容有重复不会覆盖前边的,会向下接着写
          fos.write("hello\r\n".getBytes());
          fos.write("qy97".getBytes());
          fos.close();
 2、文件输入流:FileInputStream
      方法:read()、close()
     字节读取:
      public static void main(String[] args){
         
                    由于数据流会出现异常,就要用try{}...catch(Exception e){e.printStackTrace();}
          try{
               //创建文件输入流的子类对象
                   FileInputStream file=new FileInputStream("d:\\aaa.txt");
                //调用read()方法
                   int len=0;
                   while((len=file.read()!=-1)){
                       System.out.print((char)len);                                       // read()方法在读取数据时,当读取完后返回-1
                  }                                                                            内容存储到len
   
              }catch(Exception e){
                       e.printStackTrace();
                   }
           
        }
     字节数组读取:(用数组读取,优点:快)
        public static void main(String[] args){
                try{
                      FileInputStream file=new FileInputStream("d:\\aaa.txt");
                      byte[] b=new byte[1024];
                      int len=0;                                                          //在读取数据时,读取的数据会存入到b数组里边,长度存
                      while((len=file.read())!=-1){                                          储到len,一次读取1024个字节
                          System.out.println(new String(b,0,len));
                          }
                     }catch(Exception e){
                       }
              }
   复制:
     (1) 读取一个字节,写一个字节
          public static void main(String[] args){
         //建立两个流对象,绑定数据源和目的地
            FileInputStream fis=null;
            FileOutputStream fos=null;
          try{
               fis=new FileInputStream("d:\\aaa.txt");//要读取的文件夹
               fos=new FileOutputStream("c:\\aaa.txt");//要复制进去的文件夹
               //读取一个字节,写一个字节
                int len=0;
                while((len=fis.read())!=-1){
                   fos.write(len);
                       }
                 }catch(Expetion e){
                  System.out.ptintln(e);
                   throe new RuntimeException("文件复制失败");
                  }finally{                                 //关闭资源流,先开后关,后开先关(被复制的后关)
                        if(fos!=null){
                            try{
                                 fos.close();
                              }catch(Exception e){
                                    e.printStackTrace();
                                 }finally{
                                  if(fis!=null){
                                       try{
                                            fis.close();
                                           }catch(Exception e){
                                                 e.printStackTrace();
                                                  throw new RuntimeException("释放资源");
                                               }
                                    }
                                   }
                         }
                    }
          }   
   (2)用数组复制文件,优点:快
          public static void main(String[] args){
                long s=System.currentTimeMillis();//监控程序的运行时间
                 FileInputStream fie=null;
                 FileOutputStream foe=null;
                 try{
                      fie=new FileInputStream("d:\\aaa.txt");
                       fos=new FileOutpurStream("c:\\aaa.txt");
                         byte[] b=new byte[1024];
                         int len=0;
                         while((len=fis.read(b))!=-1){
                              fos.write(b,0,len);
                             }
                       }catch(Exception e){
                             e.printStackTrace();
                           }finally{
                               try{
                                    if(fos!=null){
                                          fos.close();
                                           }
                                    }catch(Exception e){
                                       e.printStackTrace();
                                     }finally{ try{
                                    if(fis!=null){
                                          fis.close();
                                           }
                                    }catch(Exception e){
                                       e.printStackTrace();
                                     }
                            }
                   long e=System.currentTimeMillis();
                   System.out.println(e-s);
               }
           }
       
字符串流:
   FileWriter   文件输出流
          方法:write()写 、close()关闭流刷新一次缓冲区、flush()刷新缓冲区
          public static void main(String[] args){
                 FileWriter file=new FileWriter("c:\\1.txt");
                 file.write(100);
                 file.write(101);
                 char[] c={'a','d','s'};
                 file.write(c);
                 file.write(c,0,len);
                 file.write("Qy97");
                 file.flush();
                 file.close();//字符串流必须必须加flush()和close()后文件才能创建出来
            }


  FileReader    文件输入流
          方法:read()读、close()关闭流刷新一次缓冲区、flush()刷新缓冲区
          public static void main(String[] args){
                 FileReader fr=new FileReader("c:\\1.txt");
\\                 int len=0;
\\                while((len=fr.read())!=-1){
\\                    System.out.print((char)len);
\\                   }
                char[] ch =new char[1024];// 一次读1024个字符
        int len= 0;
        while((len=fileReader.read(ch))!=-1){
            System.out.println(new String(ch,0,len));
        }
        fileReader.close();
            }

字节转字符
      public static void main(String[] args){
                writeUTF();
         }
      public static void weiteUTF(){
            try{
                  //字节
                   FileOutputStream fos=new FileOutputStream("c:\\utf.txt");
                   OutputStreamWriter sow=new OutputStreamWriter(fos,"utf-8");
                   sow.write("你好");
                   sow.close();
                }catch(Exception e){
                   e.printStackTrace();
              }
         }













































posted @ 2019-03-29 19:45  橙汁one  阅读(125)  评论(0编辑  收藏  举报