一、字节流复制文本文件

需求:把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();

    }
}