再美不及姑娘你
又见西风上碧树
posts - 135,comments - 7,views - 47982

一、字节流复制文本文件

需求:把E盘下的abc.txt文件复制到F盘下的abc.txt中

分析:

1.复制文本文件,其实就是把文本文件的内容从一个文件中读出(数据源),然后写入到另一个文件中(目的地)

2.数据源:E:\\abc.txt ——>需要读数据——>InputStream——>最终实现类FileInputStream

3.目的地:F:\\abc.txt——>需要写数据——>OutputStream——>最终实现类FileInputStream

步骤:

1.根据数据源创建字节输入流对象

2.根据目的地创建字节输出流对象

3.读写数据,复制文本文件(一次读取一个字节、一次写入一个字节;)

4.释放资源

/*需求:把E盘下的abc.txt文件复制到F盘下的abc.txt中
分析:
1.复制文本文件,其实就是把文本文件的内容从一个文件中读出(数据源),然后写入到另一个文件中(目的地)

2.数据源:E:\\\abc.txt ——>需要读数据——>InputStream——>最终实现类FileInputStream

3.目的地:F:\\\abc.txt——>需要写数据——>OutputStream——>最终实现类FileInputStream
步骤:
1.根据数据源创建字节输入流对象
2.根据目的地创建字节输出流对象
3.读写数据,复制文本文件(一次读取一个字节、一次写入一个字节;建议使用循环方式)
4.释放资源
* */
public class Demo02 {
  public static void main(String[] args) throws IOException {
      //根据数据源创建字节输入流对象
      FileInputStream fips=new FileInputStream("E:\\abc.txt");
      //根据目的地创建字节输出流对象
      FileOutputStream fops=new FileOutputStream("F:\\abc.txt");
      //读写数据,复制文本文件(一次读取一个字节、一次写入一个字节;建议使用循环方式)
        int by;
      while((by=fips.read())!=-1){
          fops.write(by);
      }
      //释放资源
      fops.close();
      fips.close();
  }
}

二、字节流复制图片

需求:把E盘下的123.jpg图片复制到F盘下的123.jpgt中

步骤:

1.根据数据源创建字节输入流对象

2.根据目的地创建字节输出流对象

3.读写数据,复制图片(一次读取一个字节数组数据、一次写入一个字节数组数据;)

4.释放资源

/*需求:把E盘下的123.jpg图片复制到F盘下的123.jpgt中
步骤:
1.根据数据源创建字节输入流对象
2.根据目的地创建字节输出流对象
3.读写数据,复制图片(一次读取一个字节数组数据、一次写入一个字节数组数据;)
4.释放资源
* */
public class Demo03 {
  public static void main(String[] args) throws IOException {
      //根据数据源创建字节输入流对象
      FileInputStream fips=new FileInputStream("E:\\123.jpg");
      FileOutputStream fops=new FileOutputStream("F:\\123.jpg");
      //读写数据,复制图片(一次读取一个字节数组数据、一次写入一个字节数组数据;)
      byte[]bytes=new byte[1024];
      int len;
      while((len=fips.read(bytes))!=-1){
          fops.write(new String(bytes,0,len).getBytes);
          fops.flush();//清除缓存
      }
      //释放资源
      fops.close();
      fips.close();
  }
}

容易出现的问题:

我在写完之后发现复制后的图片双击打不开,再回去看代码,也没几行,我觉得问题应该是出在了字节数组转字符串再转字节数组那一行,猜测应该是二进制数据在转成字符串后出现了问题,再转回去的数据不是之前的了,所以写入的数据不是之前的图片的二进制数据,才会出现损坏或不被识别。 尝试对这一行进行修改,既然转String出现问题,那么就不转了,直接写字节数组

/*需求:把E盘下的123.jpg图片复制到F盘下的123.jpgt中
步骤:
1.根据数据源创建字节输入流对象
2.根据目的地创建字节输出流对象
3.读写数据,复制图片(一次读取一个字节数组数据、一次写入一个字节数组数据;)
4.释放资源
* */
public class Demo03 {
  public static void main(String[] args) throws IOException {
      //根据数据源创建字节输入流对象
      FileInputStream fips=new FileInputStream("E:\\123.jpg");
      FileOutputStream fops=new FileOutputStream("F:\\123.jpg");
      //读写数据,复制图片(一次读取一个字节数组数据、一次写入一个字节数组数据;)
      byte[]bytes=new byte[1024];
      int len;
      while((len=fips.read(bytes))!=-1){
          fops.write(bytes,0,len);
          fops.flush();//清除缓存
      }
      //释放资源
      fops.close();
      fips.close();
  }
}

完美解决!!!

三、字节流复制视频

需求:把E盘下的123.mp4图片复制到F盘下的123.mp4t中

步骤:

1.根据数据源创建字节输入流对象

2.根据目的地创建字节输出流对象

3.读写数据,复制视频(4种方式,基本字节流一次读写一个字节、一次读写一个字节数组数据;字节缓冲流一次读写一个字节、一次读写一个字节数组)

4.释放资源

/*需求:把E盘下的123.mp4图片复制到F盘下的123.mp4
步骤:
1.根据数据源创建字节输入流对象
2.根据目的地创建字节输出流对象
3.读写数据,复制视频(4种方式,基本字节流一次读写一个字节、一次读写一个字节数组数据;字节缓冲流一次读写一个字节、一次读写一个字节数组)
4.释放资源
* */
public class Demo05 {
  public static void main(String[] args) throws IOException {
      //记录开始时间
      long startime=System.currentTimeMillis();
      //方式一
      method1();
      //方式二
      method2();
      //方式三
      method3();
      //方式4
      method4();
      //记录结束时间
      long endtime= System.currentTimeMillis();
      System.out.println("共用时"+(endtime-startime)+"毫秒");
  }
  //方法一,使用基本字节流实现一次读取一个字节
  public static void method1() throws IOException {
      FileOutputStream fops=new FileOutputStream("F:\\123.mp4");
      FileInputStream fips=new FileInputStream("E:\\123.mp4");
      //一次读取一个数据
      int by;
      while((by=fips.read())!=-1){
          fops.write(by);
      }
      fops.close();
      fips.close();

  }
  //方法二,一次读取一个字节数组数据
  public static void method2() throws IOException {
      FileInputStream fips=new FileInputStream("E:\\123.mp4");
      FileOutputStream fops=new FileOutputStream("F:\\123.mp4");
      //一次读取一个数据
      byte []bytes=new byte[1024];
      int len;
      while((len=fips.read(bytes))!=-1){
          fops.write(bytes,0,len);
      }
      fops.close();
      fips.close();

  }
  //方法三,使用字节缓冲流一次读取一个字节
  public static void method4() throws IOException {
      //创建字节缓冲流对象
      BufferedInputStream bips=new BufferedInputStream(new FileInputStream("E:\\123.mp4"));
      BufferedOutputStream bops=new BufferedOutputStream(new FileOutputStream("F:\\123.mp4"));
      //一次读取一个字节数据
      int by;
      while((by=bips.read())!=-1){
          bops.write(by);
      }
      bips.close();
      bops.close();

  }
  //方法四,使用字节缓冲流一次读取一个字节数组数据
  public static void method3() throws IOException {
      //创建字节缓冲流对象
      BufferedInputStream bips=new BufferedInputStream(new FileInputStream("E:\\123.mp4"));
      BufferedOutputStream bops=new BufferedOutputStream(new FileOutputStream("F:\\123.mp4"));
      //一次读取一个字节数组数据
      byte []bytes=new byte[1024];
      int len;
      while((len=bips.read(bytes))!=-1){
          bops.write(bytes,0,len);
      }
      bips.close();
      bops.close();

  }
}

 

posted on   再美不及姑娘你  阅读(2127)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示