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(); } }
//解决结果:成功!
//错误等级:低级