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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© hellotaomi 中级黑马   /  2015-5-5 17:35  /  1770 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

最近在学习IO流,根据学习的内容写了一个字节流复制图片的程序,代码如下:
  1. import java.io.*;
  2. class CopyPic
  3. {
  4.         public static void main(String[] agrs) throws IOException
  5.         {
  6.                 //获取键盘输入对象
  7.                 BufferedReader bufr = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\1.jpg")));
  8.                
  9.                 BufferedWriter bufw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\2.jpg")));
  10.                 String line = null;
  11.                 while((line=bufr.readLine())!=null)
  12.                 {
  13.                         //if("over".equals(line))
  14.                         //        break;
  15.                         bufw.write(line);
  16.                         //bufw.newLine();//换行
  17.                         bufw.flush();                       
  18.                 }
  19.         }
  20. }
复制代码
但是在最后执行后,copy的图片打开却是空白的。

请教各位高手,这是为什么呢?


11 个回复

倒序浏览
图片应该用字节流读取啊~用字节流打开文件,用一个byte数组保存信息、输出信息~
回复 使用道具 举报
给你改了代码:
  1. import java.io.*;
  2. class TEST
  3. {
  4.         public static void main(String[] agrs) throws IOException
  5.         {
  6.                 //获取键盘输入对象
  7.                 FileInputStream fin =new FileInputStream("C:\\bar.emf");
  8.                
  9.                 FileOutputStream fout = new FileOutputStream("C:\\1.jpg");
  10.                 byte[] tmp=new byte[1024];
  11.                                 int len=0;
  12.                 while((len=fin.read(tmp))!=-1)
  13.                 {
  14.                         //if("over".equals(line))
  15.                         //        break;
  16.                         fout.write(tmp,0,len);
  17.                         //bufw.newLine();//换行
  18.                        fout.flush();                        
  19.                 }
  20.                                 fout.close();
  21.                                
  22.         }
  23. }
复制代码



回复 使用道具 举报
import java.io.*;
class Test
{
        public static void main(String[] agrs) throws Exception
        {
                //获取键盘输入对象
                FileInputStream fis = new FileInputStream("d:\\1.jpg");
                FileOutputStream fos =null;
                byte[] by = new byte[1024*1024];
                int line = 0;
                while((line=fis.read(by))!=-1)
                {
                        fos = new FileOutputStream("d:\\2.jpg");
                        fos.write(by,0,line);
                        fos.close();                                
                }
                fis.close();
        }
}
这个可以。
回复 使用道具 举报
获取键盘录入不要,文件不是从键盘录入的。复制完了,自己关流,不需要给出关闭判断。
回复 使用道具 举报
注意下刷新的方式
回复 使用道具 举报
这个还需要一个FileInputStream 和 FileOutputStream~
回复 使用道具 举报
刚学到用io复制文本,先看看咋复制图片的
回复 使用道具 举报
你不能用字符流来操作字节流对象啊!这样结果肯定有问题啊!你字用BufferedInputStream()和BufferedOutputStream()应该就没有问题了吧!
回复 使用道具 举报
谁定。。不懂学习学习
回复 使用道具 举报
操作二进制文件需要使用字节流,否则会造成文件的损坏。其实你用Reader读取之后,可以使用转换流(OutputStreamWriter)将读取的字符数组写出去,会得到一个文件,但是。。。。文件已经面目全非了。
回复 使用道具 举报
复制图片、音频等不是应该用字节流的么?基本的、高效的都行啊。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马