黑马程序员技术交流社区

标题: 我写的这个字节流复制,一直在读取写入,没法关闭 [打印本页]

作者: 潘际昌    时间: 2013-11-23 16:42
标题: 我写的这个字节流复制,一直在读取写入,没法关闭
本帖最后由 潘际昌 于 2013-11-27 15:43 编辑

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("复制成功!");
                }

        }
        

作者: quan23355    时间: 2013-11-23 17:53
哥们分辨率调的太高了?对眼睛不好哦。看不清啊
作者: 吴琼cola    时间: 2013-11-23 18:06
你的while循环有问题,你觉得你打开的文件能一次就把byte填满了吗,读文件你还是查看有关的例子。2.你的bo.flush()操作,吧bo变成了null,所以你下面的close操作没有执行,所以一直往里写文件。3.刚开始建议你,关闭流的操作直接写在下面就好,别用fianlly,等应用熟练再说。
作者: 中关村阿旺    时间: 2013-11-23 20:28
你的while循环有问题啊。while(len!=-1),如果你的读取流读到内容了,len肯定不是-1了,你这样循环,就是一个死循环!不是程序一直在读取,而是出于一个死循环中,一直在往目的文件中重复的写入内容。
你应该这样写:while((len=bi.read(buf))!=-1){写上你循环中的代码}。这样才是当文件中的数据读取完毕,那么read()方法返回-1,那么这个循环就结束了。
作者: 何伟超    时间: 2013-11-27 15:01
你把if(bi!=null)和if(bo!=null)都放在太容易里面试试?
作者: 王东旭    时间: 2013-11-28 00:16
import java.io.*;
public class Test4 {

        public static void main(String[] args)
        {
                BufferedOutputStream bo=null;
                BufferedInputStream bi=null;
                try
                {
                        bi=new BufferedInputStream(new FileInputStream("D:\\123.jpg"));
                        bo=new BufferedOutputStream(new FileOutputStream("d:\\Demo_copy.jpg"));
                        byte[] buf=new byte[1024];
                        int len = 0;
                        //这里改一下,你原来不停地重复写入读取的第一组数据
                        while((len = bi.read(buf))!=-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("复制成功!");
                }

        }
}






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