使用Java来复制文件

复制文件

思路:

  1. 创建FileInputStream的对象fis,关联源文件。
  2. 创建FileOutputStream的对象fos,关联目标文件
  3. 创建字节流bytes(byte[]类型),使用循环,通过fisread方法把源文件字节读入字节流,函数参数是字节流,返回值是读取的有效字节数。同时,通过fos把字节流写入目标文件,当read方法返回-1,说明读取到了源文件的结束标志
  4. 关闭输入输出流
    在这里插入图片描述

代码实现

private static void copyFileByBytes(File srcFile, File destFile) throws IOException {
        long startTime = System.currentTimeMillis();
        // 1.创建InputStream,关联源文件
        FileInputStream fis = new FileInputStream(srcFile);
        // 2.创建OutputStream,关联目标文件

        FileOutputStream fos = new FileOutputStream(destFile);
        // 3.逐字节读取视频源文件,逐字节写入目标文件,速度非常的慢
        /*
        int b=-1;
        while((b = fis.read()) != -1){
            fos.write(b);
        }
        */
        //  优化:使用字符数组从源文件逐字节段读入字节数组(字节流),再逐字节段写入目标文件
        //   注意事项: 逐字节读取read返回值是读取的字节,遇到文件结束符读取的值为-1
        //             逐字节段读取,read返回值是读取到的有效字节长度,read接受的参数是一个字符数组,把读取到的字节放入字节数组(字节流)
        byte[] bytes = new byte[1024 * 10];
        int len = -1;
        while ((len = fis.read(bytes)) != -1){
            fos.write(bytes,0,len);
        }
        // 4.关闭流
        fos.close();
        fis.close();
        long endTime = System.currentTimeMillis();
        System.out.println("批量读取用时:" + (endTime - startTime) + "毫秒");
    }

总结

  1. 批量的把字节流写入文件要限定写入字节流长度,因为字节流中的数据是覆盖进行刷新的,如图
    在这里插入图片描述
    源文件读取完毕以后,字节流中内容如图所示,因为第三次读取了2个字节的有效数据,所以字节流中还保留着第二次读取的一部分剩余内容。

  2. 读取到文件结束标志,返回值为-1。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章