黑马程序员技术交流社区

标题: 我写的字节流复制,一直在读取复制,停不下来 [打印本页]

作者: 潘际昌    时间: 2013-11-23 18:17
标题: 我写的字节流复制,一直在读取复制,停不下来
本帖最后由 潘际昌 于 2013-11-24 00:56 编辑

import java.io.*;
public class RuXue6 {

        public static void main(String[] args)
        {
                BufferedOutputStream bo=null;
                BufferedInputStream bi=null;
                try
                {
                        bi=new BufferedInputStream(new FileInputStream("f:\\Demo.txt"));
                        bo=new BufferedOutputStream(new FileOutputStream("f:\\Demo_copy.txt"));
                        byte[] buf=new byte[1024];
                        int len=bi.read(buf);
                        while(len!=-1)
                        {
                                bo.write(buf, 0,len);
                                bo.flush();
                        }
                }
                catch(IOException e)
                {
                        System.out.println("你的路径是错误的!");
                        
                }
                finally
                {
                        if(bi!=null)
                        {
                                try
                                {
                                        bi.close();
                                }
                                catch(IOException e)
                                {
                                        System.out.println("读取流关闭失败!");
                                }
                        }
                        if(bo!=null)
                        {
                                try
                                {
                                        bo.close();
                                }
                                catch(IOException e)
                                {
                                        System.out.println("输入流关闭失败!");
                                }
                        }
                        System.out.println("复制成功!");
                }

        }
        

作者: ~IN_HAND~    时间: 2013-11-23 18:43
首先,你的思路是没错的,先读取,后写入。
但是,你的代码采用的是一次性读取完毕,然后一次性写入完毕。
这样的话,在你写入时,就只能写一次,而不是循环的去写。
而恰恰你的代码用的就是循环,它必然停不下来!
while(len!=-1)
{
        bo.write(buf, 0,len);
        bo.flush();
}
把循环去掉就行了。
作者: 心的方向    时间: 2013-11-23 18:43
应该是这样的吧
                        int len=0;
                        while((len=bi.read(buf))!=-1)
                        {
                                bo.write(buf, 0,len);
                                bo.flush();
                        }


作者: 潘际昌    时间: 2013-11-23 18:58
心的方向 发表于 2013-11-23 18:43
应该是这样的吧
                        int len=0;
                        while((len=bi.read(buf))!= ...

我那样写和你这写法有区别?:L不都一样!
作者: 何超    时间: 2013-11-23 20:37
你操作的是纯文本文件为什么用 字节流···
你之所以不能跳出循环 是因为 你的Len 根本就是一个定值 长度就等于你文档里字符的长度
永远不可能为-1  不信你自己在循环里面用  sop(len)  输出看!
int len=read(buf);这句话就让你的len被赋值了
要清楚的理解read()和read(buf)的区别 都是读取 但是区别还是挺大的
好几天没来了  = = 连续签到也没了 赶快回答问题拿技术分···不然赶不上时间了 我勒个去
作者: 心的方向    时间: 2013-11-23 21:20
潘际昌 发表于 2013-11-23 18:58
我那样写和你这写法有区别?不都一样!

你真把我说蒙了,while()只要不等于-1就循环执行,你那样写只执行了(读了bi.read(but))一次!你把我吓了一跳:lol
作者: 心的方向    时间: 2013-11-23 21:21
虽然你在循环写但你只读了一次,这是有问题的,那样写不对吧
作者: FFF    时间: 2013-11-24 00:40
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~
作者: 潘际昌    时间: 2013-11-24 01:08
FFF 发表于 2013-11-24 00:40
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89 ...

为什么那个粘贴复制活动 我发了40多个群 截了24个图  咋没有5分技术分啊:lol
作者: 潘际昌    时间: 2013-11-24 12:54
潘际昌 发表于 2013-11-24 01:08
为什么那个粘贴复制活动 我发了40多个群 截了24个图  咋没有5分技术分啊 ...

怎么找滔哥,权限不够,都发不了信息:L @黑马-滔哥




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