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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑小杰 中级黑马   /  2012-7-20 13:25  /  1575 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
复制一个图片
思路:
1,用字节读取流对象和图片关联
2,用字节写入流对象创建一个图片文件,用于存储获取到的图片数据
3,通过循环读写,完成数据的存储
4,关闭资源
*/
import java.io.*;
class  CopyPic
{
public static void main(String[] args)
{
  FileOutputStream fos = null;
  FileInputStream fis = null;
  try
  {
   fos = new FileOutputStream("c:\\2.jpg");
   fis = new FileInputStream("c:\\1.jpg");
   byte[] buf = new byte[1024];
   int len = 0;
   while((len=fis.read())!=-1)
   {
    fos.write(buf,0,len);
   }
  }
  catch (IOException e)
  {
   throw new RuntimeException("复制文件失败");
  }
  finally
  {
   try
   {
    if(fos!=null)
     fos.close();
   }
   catch (IOException e)
   {
    throw new RuntimeException("写入关闭失败");
   }
  
  try
   {
    if(fis!=null)
     fos.close();
   }
   catch (IOException e)
   {
    throw new RuntimeException("读取关闭失败");
   }
  
  }

}
}
上边的代码可以实现复制,但是复制出来的图片打不开,怎么回事?还有就是原来的图片只有20.1k  ,为什么复制出的有2.36M  ?试了几次都这样

点评

这样的错误我犯过,还发帖问了为什么我复制媒体文件这么长时间,这属于没弄清楚方法的具体用法  发表于 2012-7-20 15:08

3 个回复

倒序浏览
/*
复制一个图片
思路:
1,用字节读取流对象和图片关联
2,用字节写入流对象创建一个图片文件,用于存储获取到的图片数据
3,通过循环读写,完成数据的存储
4,关闭资源
*/
import java.io.*;
class  CopyPic
{
public static void main(String[] args)
{
  FileOutputStream fos = null;
  FileInputStream fis = null;
  try
  {
   fos = new FileOutputStream("c:\\2.jpg");
   fis = new FileInputStream("c:\\1.jpg");
   byte[] buf = new byte[1024];
   int len = 0;
   while((len=fis.read(buf))!=-1)//哥们 这里注意了.你这里没写buf.没写buf就是一个字节一个字节的读取.读一个字节判断一次,是不是=-1不是就把1M的数组(没有内容的数组)写进去了.
                                              //所以你复制的文件打开不是图片,而且比原来的大
                                            //哥们你可害苦了我,你的目标文件小,一个字节一个字节的判断.很快就结束了,我的可是3M的图片这一个字节一个字节的判断,电脑风扇立马就嘎嘎的响起来了
   {
    fos.write(buf,0,len);
   }
  }
  catch (IOException e)
  {
   throw new RuntimeException("复制文件失败");
  }
  finally
  {
   try
   {
    if(fos!=null)
     fos.close();
   }
   catch (IOException e)
   {
    throw new RuntimeException("写入关闭失败");
   }
  
  try
   {
    if(fis!=null)
     fos.close();
   }
   catch (IOException e)
   {
    throw new RuntimeException("读取关闭失败");
   }
  
  }

}
}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
import java.io.*;
class  CopyPic
{
public static void main(String[] args)
{
  FileOutputStream fos = null;
  FileInputStream fis = null;
  try
  {
   fos = new FileOutputStream("c:\\2.jpg");
   fis = new FileInputStream("c:\\1.jpg");
   byte[] buf = new byte[1024];
   int len = 0;
   while((len=fis.read())!=-1)    //这句有问题,fis.read()是读一个字节,返回的是下一个字节的数据,而不是读入到流中的字节数,你将下一个字节的数据赋给了len,下面的写入操作一定会出问题。
//另外,正确的操作应该是len=fis.read(buf)
   {
    fos.write(buf,0,len);  //由于上面的原因,写入的数据是从0到len的数据,上面取到的len所以你的图片会是2M多
   }
  }
  catch (IOException e)
  {
   throw new RuntimeException("复制文件失败");
  }
  finally
  {
   try
   {
    if(fos!=null)
     fos.close();
   }
   catch (IOException e)
   {
    throw new RuntimeException("写入关闭失败");
   }
  
  try
   {
    if(fis!=null)
     fos.close();
   }
   catch (IOException e)
   {
    throw new RuntimeException("读取关闭失败");
   }
  
  }

}
}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

回复 使用道具 举报
周玉龙 发表于 2012-7-20 13:38
/*
复制一个图片
思路:

原来如此啊,谢了,哥们电脑没问题吧?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马