黑马程序员技术交流社区

标题: io流复制图片 [打印本页]

作者: 凝聚    时间: 2013-10-24 10:19
标题: io流复制图片
本帖最后由 凝聚 于 2013-10-24 15:51 编辑

package Nineteen;
import java.io.*;
public class twelve {
        public static void main(String[] args)throws IOException
        {
FileOutputStream fos=null;
FileInputStream    fis=null;
try
{
        fos=new FileOutputStream("D:\\图片\\自己喜欢的\\3b7f47074d6e084c25ec1e883952339f.jpg");
        //fis=new FileInputStream("me.bmp");
fis=new FileInputStream("me.jpg");
        byte[]buf=new byte[1024];
        int len=0;
        while((len=fis.read(buf))!=-1)
        {
                fos.write(buf,0,len);
        }
}
catch(IOException e)
{
        throw new RuntimeException("复制文件失败");
}
finally
{
        try
        {
                if(fis!=null)
                        fis.close();
        }
        catch(IOException e)
        {
                throw new RuntimeException("读取文件失败");
        }
        try
        {
                if(fos!=null)
                        fos.close();
        }
        catch(IOException e)
        {
                throw new RuntimeException("写入文件失败");
        }
}
        }
}
这段代码显示“文件复制错误”是怎么回事啊。


作者: 张宏祚    时间: 2013-10-24 10:22
你的每一次读取数据的while循环里面,只有write,就是将数据写入内存中,但是没有flush(),仅仅是在最后的关闭流的时候,系统能够自动flush。这样不太好吧!
作者: 凝聚    时间: 2013-10-24 10:28
张宏祚 发表于 2013-10-24 10:22
你的每一次读取数据的while循环里面,只有write,就是将数据写入内存中,但是没有flush(),仅仅是在最后的 ...

依然不行啊
作者: 王松松    时间: 2013-10-24 10:29
本帖最后由 王松松 于 2013-10-24 10:54 编辑

应该是你在写入的时候代码书写错误了。

  1. <P>byte[]buf=new byte[1024];
  2.         int len=0;
  3.         while((len=fis.read(buf))!=-1)
  4.         {
  5.                 fos.write(buf,0,len);
  6.         }
  7. </P>
复制代码
改为下面代码试一试:
  1. int ch= 0;

  2. while ((ch = fis.read())!=-1)
  3. {
  4. fos.write(ch);
  5. }
复制代码

作者: 枫儿    时间: 2013-10-24 14:25
IO流~
作者: heke    时间: 2013-10-24 15:27
可能是你输入流和输出流搞混了,
FileOutputStream():创建一个具有指定名称的文件中写入数据的输出文件流,就是你要复制到的文件地址。
FileOutputStream():从文件系统中的某个文件中获取输入字节。就是你准备复制文件的地址。
你上面代码交换下路径,应该就不会有文件复制错误



作者: 凝聚    时间: 2013-10-24 15:50
heke 发表于 2013-10-24 15:27
可能是你输入流和输出流搞混了,
FileOutputStream():创建一个具有指定名称的文件中写入数据的输出文件流 ...

哥们说点什么好呢,你太给力,果然如此啊,是我太马虎了,谢谢了:victory:




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2