(十二)Core Java IO流(键盘录入, 读取转换流,,文件操作)-02 (107)

本文详细介绍了Java IO流的各种应用场景,包括如何使用字节流复制图片,利用字节流的缓冲区提高效率,自定义字节流缓冲区的读写特点,以及递归和非递归方式列出目录下所有内容。此外,还涉及了文件的读取、写入、删除等操作。
摘要由CSDN通过智能技术生成
 目录 :           
21 ).IO流(拷贝图片)

22 ). IO流(字节流的缓冲区)

23 ). IO流(自定义字节流的缓冲区-read和write的特点)

24 ). IO流(读取键盘录入)

25 ). IO流(读取转换流)

26 ). IO流(写入转换流)

27 ). IO流(流操作规律-1)

28 ).IO流(流操作规律-2)

29 ). IO流(改变标准输入输出设备)

30 ). IO流(异常的日志信息)

31 ). IO流(系统信息)

32 ). IO流(File概述)

33). IO流(File对象感功能-创建和删除)

34 ). IO流(File对象功能--判断)

35 ). IO流(File对象功能--获取)

36 ). IO流(File对象功能--文件列表)

37 ). IO流(File对象功能--文件列表2)

38 ).IO流(列出目录下所有内容--递归)

39  ). IO流(列出目录下所有内容--带层次)

40 ). IO流(删除带内容的目录)




     二十一 .  IO流(拷贝图片)

1 ) .  通过字节的写出流和读入流完成图片的操作

2 ) . Demo : 

/*
 
  本章讲述 :
 
  需求 :复制一个图片
 
思路 :
[1] 用字节读取流对象和图片关联
[2] 用字节写入流对象创建一个图片文件,用于存储获取到的图片数据
[3] 通过循环读写,完成数据的存储
[4] 关闭资源  
       
 */
 
 
 
 
  import java.io.*;
  class CopyPic
  {    
              public static void sop(Object obj)
              {
                     System.out.println(obj);
              } 
            
                    
                    
                    
      
               //主方法
                public static void main(String args[])
               {   
                         //用来读数据
                              FileInputStream fis =null;
                           
                          //用来写数据
                              FileOutputStream fos =null;
                
                             
                              try
                              { 
                              //实例化读数据
                             fis =  new FileInputStream("123.png");
                            
                            
                              //实例化写数据
                             fos = new FileOutputStream("456.png");
                                 
                                        //定制缓冲区
                                    byte[] by =new byte[1024];
                                    //记录字节数
                                    int len=0;
                                   
                                    //将数据读入缓冲区
                                   while((len=fis.read(by))!= -1)
                                    {
                                         
                                           //将数据从缓冲区写入到指定地址
                                           fos.write(by,0,len);
                                          
                                    }
                                   
                              }
                              catch(IOException e)
                              {
                                    throw new RuntimeException("复制文件失败");
                                   
                              }
                              finally
                              {
                                        try
                                        {      if(fis!=null)
                                               fis.close();
                                               
                                        }
                                        catch(IOException e)
                                        {
                                               throw new RuntimeException("读失败");
                                               
                                        }
                                        
                                        try
                                        {      if(fos!=null)
                                               fos.close();
                                               
                                        }
                                        catch(IOException e)
                                        {
                                               throw new RuntimeException("写失败");
                                               
                                        }
                                   
                              }
                             
                             
                    
               }
             
      
  }    
 
            

 
小结 :  

             1.  一定要记得 第三方缓冲区 ,他可用来提高效率
        
        
 

       二十二. IO流(字节流的缓冲区)


1 ) .  通过字节流的缓冲区完成音频的复制,并且计算出复制用了多长时间

2 ) . 

/*
 
  本章讲述 :
 
  需求 :Mp3的复制,通过字节流的缓冲区完成复制
 
 
 
       
 */
 
 
 
 
  import java.io.*;
  class CopyMp3
  {    
              public static void sop(Object obj)
              {
                      System.out.println(obj);
              } 
            
                    
                     public static void copy_mp3()  throws IOException
                     {
                       //获取到读入的缓冲区并将读入的字节流对象放入
                       BufferedInputStream bis =new BufferedInputStream(new FileInputStream("Beyond.mp3"));
                       //获取到写出的缓冲区并将写出的字节流对象放入
                       BufferedOutputStream bos =new BufferedOutputStream(new FileOutputStream("\\A:\\Beyond_copy.mp3"));
                      
                       int len=0;
                      
                           //读入
                       while((len=bis.read())!=-1)
                       {   //写出
                              bos.write(len);
                             
                       }
                           
                     }
                    
      
               //主方法
                public static void main(String args[])  throws IOException
               {   
                                 long start=   System.currentTimeMillis(); //开始时间
                                 
                                 copy_mp3();
                                 
                                 long end=     System.currentTimeMillis();  //结束时间
                                        
                                         sop((end-start)+"毫秒");  //时间差
                                        
                             
                             
                    
               }
             
      
  }    
 
            

 

小结 :  

             1.  System.currentTimeMillis();  获取当前时间
        
      


      二十三. IO流(自定义字节流的缓冲区-read和write的特点)

1 ) . 自定义字节流的缓冲区 : 数据放入 ,数据取出

2 ) . Demo : 

/*
 
  本章讲述 :
 
  自定义字节流的缓冲区 :
 
  读入1024字节的数据,完事再取出,当取出一个则 数组计数器递减,指针递增,直至取完,当取完时返回-1
 
 
 
       
 */
 
 
 
  import java.io.*;
 class myBufferedStream
 {
        private InputStream is ;
        private  byte[] buf =new byte[1024];
        private int pos=0,count=0;
        myBufferedStream(InputStream is)
        {
              this.is  = is;
             
        }
       
       //一次读一个字节,从缓冲区(字节数组)获取
        public int myRead() throws IOException //这里返回值是int是为了让char类型向上提升,避免二进制换算为-1的情况
        {
              //当数组中元素为零时才新创建数组
             if(count==0){  //通过in对象读取硬盘上的数据,并存储到buf中
 
              count =  is.read(buf);  //读取数组中的数据并返回字节数
                    if(count<0) //当数组中没有元素时,则说明读到了末尾
                           return -1;
             
              pos =0;   //当新创建数组时清除指针指向
             
               byte b = buf[pos];  //读取数组中指针指向的单个数据并返回
             
             
              count--; //字节数 递减
              pos++;   // 指针指向递增
             
              return b*254; //返回单个字节
             } else if (count > 0)
             {
                     byte b = buf[pos];  //读取数组中指针指向的单个数据并返回
             
             
                     count--;  //字节数 递减
                    
                    
                     pos++; // 指针指向递增
                    
                     return b*254;  //在这里*254是为了避免出现二进制全是 1的情况 的解决方案,因为当全是1是 意味着 返回的数是 -1  ,则判断会出现不通过
                    
             }
             
             return -1;  //当取完时 返回 -1
             
        }
       
        //自定义关闭流资源方法
        public void myClose()throws IOException
        {
              is.close();
             
        }
       
       
 }
  class MyCopy
  {    
              public static void sop(Object obj)
              {
                      System.out.println(obj);
              } 
            
                    
                     public static void copy_2() throws IOException
                     {
                           
                            //自定义用来读入数据的缓冲区流对象
                            myBufferedStream mbs = new myBufferedStream(new FileInputStream("Beyond.mp3"));
                           
                            //jdk中的用来写出数据的缓冲区流对象
                            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("Beyond_copy.mp3"));
                           
                            int len =0;
                           
                            while((len=mbs.myRead())!=-1)
                            {
                                  bos.write(len);
                                 
                            }
                           
                           
                            mbs.myClose();
                           
                            bos.close();
                           
                     }
                    
       
                    
      
               //主方法
                public static void main(String args[])  throws IOException
               {   
                                 
                              long start = System.currentTimeMillis();  //开始时间
                           
                                 copy_2();
                                 
                              long end = System.currentTimeMillis();  //结束时间
                             
                              
                              sop((end-start)+"毫秒");  //计算时间差
               }
             
      
  }    
 
            

 
小结 :  

             1.  MP3的数据是二进制的数据
        
           2.  二进制当中涉及到一个知识点是 当 八个 1 时,则会出现 返回 -1的现象

    
 

      二十   四. IO流(读取键盘录入)

1 ) . 读取键盘录入 : 通过InputStream  in =  System.in   ,通过此方法完成   ,  System中的方法, 返回值类型是 InputStream

2 ) . Demo: 

/*
 
  本章讲述 :
 
  读取键盘录入 :
 
  Ssytem.out : 对应的是标准输出设备: 控制台
  System.in : 对应的是标准输入设备:键盘
 
  需求 : 通过键盘录入数据 ,当录入一行数据后,就将该数据进行打印
 
  ps : 若录入的数据是voer,则停止录入
  
 
 
       
 */
 
 
 
  import java.io.*;
 
  class ReadIn
  {    
              public static void sop(Object obj)
              {
                      System.out.println(obj);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值