A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 黑马-王鹏 于 2013-4-8 12:32 编辑
  1. //需求:从d盘复制图片到e盘
  2. import java.io.*;
  3. class CopyPicture
  4. {
  5. public static void main(String[] args)
  6. {
  7. FileOutputStream fos = null;
  8. FileInputStream fis = null;
  9. try
  10. { //创建目的文件
  11. fos = new FileOutputStream("e:\\kobe24.jpg");
  12. //创建关联文件
  13. fis = new FileInputStream("d:\\kobe.jpg");
  14. byte [] bt = new byte[1024];
  15. int len = 0;
  16. while ((len=fis.read(bt))!=-1)
  17. {
  18. fos.write(bt);
  19. }
  20. }
  21. catch (IOException e)
  22. {
  23. throw new RuntimeException("图片异常");
  24. }
  25. finally
  26. {
  27. try
  28. {
  29. if(fis!=null)
  30. fis.close();
  31. }
  32. catch (IOException e)
  33. {
  34. throw new RuntimeException("图片读取异常");
  35. }
  36. try
  37. {
  38. if(fos!=null)
  39. fos.close();
  40. }
  41. catch (IOException e)
  42. {
  43. throw new RuntimeException("图片写入异常");
  44. }
  45. }
  46. }
  47. }
复制代码
为什么图片拷贝之后会大1KB啊?

1JSC1MX[W%2(7YPVDU1Q1_P.jpg (35.58 KB, 下载次数: 78)

1JSC1MX[W%2(7YPVDU1Q1_P.jpg

7~JDQZ{A0)4[%7@5OXQ7S0C.jpg (30.11 KB, 下载次数: 84)

7~JDQZ{A0)4[%7@5OXQ7S0C.jpg

5 个回复

倒序浏览
看了一下你的代码,估计是

fos.write(bt)的问题
建议你fos.write(bt,0,len);试试。大概原因可能是最后没读慢1024的空间,空的页读进去了。改了试一下。

回复 使用道具 举报
byte [] bt = new byte[1024];//定义一个长度为1024的数组,也就是每次往这个数组装1024个字节就写出去

int len = 0;

while ((len=fis.read(bt))!=-1)

{

fos.write(bt);//每次都写1024个字节,但最后一次肯定不可能也刚好是1024个字节,你把空的格子也写进去了肯定多了。把它改成:
fos.write(bt,0,len);//读了多少写多少,空格子不写出去
回复 使用道具 举报
梁航斌 发表于 2013-4-8 11:47
看了一下你的代码,估计是

fos.write(bt)的问题

嗯,就是这个原因,赞一个
回复 使用道具 举报
炉海佳 发表于 2013-4-8 12:07
byte [] bt = new byte[1024];//定义一个长度为1024的数组,也就是每次往这个数组装1024个字节就写出去

in ...

回答的非常详细,谢了哈
回复 使用道具 举报
楼上的 已经回答了····{:soso_e127:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马