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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

/*
* 将一个图片用字符流从硬盘的一个地方复制到另一个地方
*/
public class ExchangeIO {


    public static void main(String[] args) throws Exception {
        BufferedReader  br = new BufferedReader(new InputStreamReader(new FileInputStream("D:\\IOstream\\2.jpg")));// 将字节流转换成字符流读取。
        BufferedWriter  bwfos = new BufferedWriter(new FileWriter("c:\\dcache\\3.jpg"));
        String  str = null;
        while((str=br.readLine())!=null){
            bwfos.write(str);
            bwfos.flush();
        }
        bwfos.close();
        br.close();
    }
}
想到有这样的一个需求,然后写了一下,能够实现 图片文件的复制,图片大小也没改变,但是我复制完后打不开 3.jpg,说此文件过大或者是已损坏。
求大神们来,看看究竟怎么回事?

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
图片文件能用字符流吗?纯文本文件才能用字符流,像图片、MP3、电影之类的不能使用字符流,只能用字节流。
  1. /*
  2. 复制一个图片
  3. 思路:
  4. 1,用字节读取流对象和图片关联。
  5. 2,用字节写入流对象创建一个图片文件。用于存储获取到的图片数据。
  6. 3,通过循环读写,完成数据的存储。
  7. 4,关闭资源。

  8. */

  9. import java.io.*;
  10. class  CopyPic
  11. {
  12.         public static void main(String[] args)
  13.         {
  14.                 FileOutputStream fos = null;
  15.                 FileInputStream fis = null;
  16.                 try
  17.                 {
  18.                         fos = new FileOutputStream("c:\\2.bmp");
  19.                         fis = new FileInputStream("c:\\1.bmp");

  20.                         byte[] buf = new byte[1024];

  21.                         int len = 0;

  22.                         while((len=fis.read(buf))!=-1)
  23.                         {
  24.                                 fos.write(buf,0,len);
  25.                         }
  26.                 }
  27.                 catch (IOException e)
  28.                 {
  29.                         throw new RuntimeException("复制文件失败");
  30.                 }
  31.                 finally
  32.                 {
  33.                         try
  34.                         {
  35.                                 if(fis!=null)
  36.                                         fis.close();
  37.                         }
  38.                         catch (IOException e)
  39.                         {
  40.                                 throw new RuntimeException("读取关闭失败");
  41.                         }
  42.                         try
  43.                         {
  44.                                 if(fos!=null)
  45.                                         fos.close();
  46.                         }
  47.                         catch (IOException e)
  48.                         {
  49.                                 throw new RuntimeException("写入关闭失败");
  50.                         }
  51.                 }
  52.         }
  53. }
复制代码
回复 使用道具 举报
鲁中需 发表于 2012-10-25 17:34
图片文件能用字符流吗?纯文本文件才能用字符流,像图片、MP3、电影之类的不能使用字符流,只能用字节流。 ...

可以通过字符流来实现 图片 影像等的复制,可能需要用到 转换流
回复 使用道具 举报
哈哈 ,二楼正解哦, 图片肯定用字节流来读嘛 , 你还用字符流 , 你还转什么啊  , 你直接用字节流读取试下不就行了 ,
字符流处理的单元为2个字节的Unicode字符,分别操作字符、字符数组或字符串,
而字节流处理单元为1个字节, 操作字节和字节数组 , 说神马都不如一试 , 楼主英明
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马