本帖最后由 yinan9 于 2013-10-18 16:54:15 编辑

解决方案 »

  1.   


    FileInputStream input=new FileInputStream("C:\\users\\auxu\\desktop\\a.txt");
    FileOutputStream output1=new FileOutputStream("C:\\users\\auxu\\desktop\\c.txt");
    byte[] buffer=new byte[2];
            int i=0;
            while(input.read(buffer)>0){
                //input.read(buffer);
                //System.out.println(buffer[0]+"\t"+buffer[1]);
                output1.write(buffer);
                System.out.println(++i);
                 
                 
            }
      

  2.   


    FileInputStream input=new FileInputStream("C:\\users\\auxu\\desktop\\a.txt");
    FileOutputStream output1=new FileOutputStream("C:\\users\\auxu\\desktop\\c.txt");
    int i=0;
    while(input.available()>0){
                            byte[] buffer=new byte[2];
    input.read(buffer);
    //System.out.println(buffer[0]+"\t"+buffer[1]);
    output1.write(buffer);
    System.out.println(++i);


    }试下
      

  3.   

    嗯,我觉得buffer调大遇到更大的文件也会有这样的问题。
    关键是我对那个目标文件会产生多余字符的问题觉得很奇怪
      

  4.   

    copy出来文件中仍然会多出一个字符来
    This a testing file for copying files by javav
      

  5.   

    你一次读取两个字节,原文件中的字节数是否有计算?
    如果文件中字符串的长度不是读取字节数的倍数,编译器还是会帮你读取剩下不足的字节!因为你原文件中的字符串是单数,最后肯定有一个字节不够2 byte,那么会帮你读取你原文件中没有的字符也就是系统中有的吧,因此多读出来了一个!你把你原文件中的字符串最后减少一个,你看看目标文件中有没有多输出!!!应该是没有的,因为2 byte刚好读得完整,不需要额外读取了!
      

  6.   

    copy出来文件中仍然会多出一个字符来
    This a testing file for copying files by javav恩,看来是需要在下次读取的时候清理一下array
      

  7.   

    传智播客2013年8月javaEE+物联云就业班分享:http://pan.baidu.com/s/11NOyJ
      

  8.   

    倒数第二次读的时候,buffer[0]=a,buffer[1]=v,
    最后一次读的时候,buffer[0]读的还是a,而buffer[1]没有读到内容,所以它还是前一次读取到的值即:v改了之后,每次读的时候都重新new一个byte数组,所以不会出现没有读到内容,就使用上次读取的结果这样的情况。
      

  9.   

    程序多运行几次,是不是除了v之外还可能出现别的字符的情况;或者你改一改条件,改成(String str  = input.read())!=null;再试试
      

  10.   


    FileInputStream input=new FileInputStream("C:\\users\\auxu\\desktop\\a.txt");
    FileOutputStream output1=new FileOutputStream("C:\\users\\auxu\\desktop\\c.txt");
    byte[] buffer=new byte[2];
            int i=0;
            int size = 0;
            while(input.available()>0){
                size = input.read(buffer);
                //System.out.println(buffer[0]+"\t"+buffer[1]);
                output1.write(buffer,0,size);
                System.out.println(++i);
                 
                 
            }这样就不会有这个问题的啊。
      

  11.   

    非常感谢!但是我仍然对buffer会复制多余的文本感到不解,能不能解释一下为什么会出现那样的情况?
      

  12.   

    16楼说的很清楚了。不是复制多余的文本。而是在倒数第二次读入的数据是a和v两个字节的数组。最后一次读入到数组里面因为只有一个a字节了,然后就在数组的第一位读入a,第二位不变,还是v。主要因为你在循环外面共用了一个数组。16楼每次都new一个数组,第二位不变的话就是0。这个跟长度有关系,但是设置更大的不能解决问题。
    byte[] buffer = new byte[2];
    int len = 0 ;
    while ((len = input.read(buffer,0,2))!=-1)
    {
    output1.write(buffer,0,len);
    }
    一般都这样写的。2随便设置。len嘛就是读取到的长度。也就是说能读取多长,我就写入多长。不明白为什么没人这样写。
      

  13.   

    只学过java的程序员,对这些很难理解,如果你是一个c程序员,每次new一个字符串的时候都要初始化,不初始化每次都可能出现不一样的随机值。