FileInputStream&FileOutputStream文件复制后文件变大

异常名称:无(运行不报任何异常)
//异常分析:测试文件名:123.txt
// 内容以utf-8编码编写的数据为:abc
// 读写操作后文件内容为
// 复制文件内容第一次:NUL*6144(空)
// 复制文件内容第二次:NUL*1,024(空)
// 复制文件内容第三次:NUL*911(空)

// 原文件大小:6 字节
// 复制文件大小第一次:6.00 KB (6,144 字节)
// 复制文件大小第二次:1.00 KB (1,024 字节)
// 复制文件大小第三次:911 字节
//问题原因:一次读多个字节,写多个字节的方式复制文件,注意写每次读取到的有效字节个数
//错误代码:
/**
 * 代码运行不报任何异常,但文件一读一写复制文件后,文件大小会变大
 * 异常代码如下:
 * */
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class test {
    public static void main(String[] args) throws IOException {
        //创建输入流
        FileInputStream fis = new FileInputStream("F:\JavaTest\File\123.txt");
        //创建输出流
        FileOutputStream fos = new FileOutputStream("F:\JavaTest\File\out\复制.txt");
        //一次读取多个字节
        byte[] bytes = new byte[1024];
        int len;
        while((len = fis.read()) != -1){
            //一次写出多个字节
            fos.write(bytes);
        }
        //关流释放资源(先开后关)
        fos.close();
        fis.close();
    }
}

正确代码及解决方案:

/**
 * 正确代码如下
 * */
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class test {
    public static void main(String[] args) throws IOException {
        //创建输入流
        FileInputStream fis = new FileInputStream("F:\JavaTest\File\123.txt");
        //创建输出流
        FileOutputStream fos = new FileOutputStream("F:\JavaTest\File\out\复制.txt");
        //一次读取多个字节
        byte[] bytes = new byte[1024];
        int len;
        while((len = fis.read(bytes)) != -1){//第一处错误
            //一次写出多个字节
            fos.write(bytes,0,len);//第二处错误
        }
        //关流释放资源(先开后关)
        fos.close();
        fis.close();
    }
}

//解决结果:成功!
//错误等级:低级
原文地址:https://www.cnblogs.com/axibug/p/14911783.html