跟踪了当然,初始为sfile {value=""},然后+ sfile {value="0 => AAAA
"}再然后+ sfile {value="0 => AAAA
11111111"}再然后输出的结果为:11111111A郁闷,还请高手指导一下啊!!!

解决方案 »

  1.   

    sfile=sfile.append(raf.readLine ());改为:sfile.append(raf.readLine ());
      

  2.   

    很正常啊,这是因为你使用了raf.readLine()的方法。这个方法顾名思义就是一行一行的读,因为他是在一行一行的读,所以返回的是每一行的数据,就是缺少了最后换行符的数据。你应该用raf.read方式。代码如下:
    byte[] fileByte = null;
    long fileLen = 0;
    fileLen = raf.length();
    fileByte = new byte[(int)fileLen];
    raf.read(fileByte);
    //while(raf.getFilePointer ()<raf.length ())
    //{
    // sfile=sfile.append(raf.readLine ());
    //}
    String ssfile = new String(fileByte);
    System.out .println (ssfile);你要注意所有的stream类的readLine方法都是有损读法,你用这种方法来实现copy的文件都已经损坏了的(至少换行符),一定要用read方法来一个字节一个字节读
      

  3.   

    上则回复是对whyxx(我也是新手)感谢  happyegg(快乐蛋) 的讲解,可是为什么我的跟踪没有显示损害,而在输出的时候会有问题呢?能给个合适的理由吗?
      

  4.   

    建议:
    while(raf.getFilePointer ()<raf.length ())
    {
        sfile=sfile.append(raf.readLine ());
    }
    System.out .println (sfile.toString ());改为:while(raf.getFilePointer ()<raf.length ())
    {
        sfile=sfile.append(raf.readLine ());
        System.out .println (sfile.toString ());
    }
    System.out .println (sfile.toString ());试下,看输出结果。另外问下你JDK的版本,我用jdk1。4测试StringBuffer很正常,
    当然,我没有写你这样的程序,只是测试StringBuffer的append方法。
      

  5.   

    倒,我知道为什么了。因为输出的时候换行没有了,只有回车符号没有换行符号,
    所以
    0 => AAAA
    11111111
    的结果是由于回车了,所以后面的"111111"是从一行开头输出,但是换行符号丢了,
    所以还是输出在0 => AAAA所在行。其实很显然的,只是一时没想到罢了。你的跟踪有问题啊,真是,刚是又看你说
    的跟踪状况才想到的,因为最后sfile的值是正确的,只是在输出时效果不理想,所以
    可以立刻证明是因为这个原因。
      

  6.   

    倒,刚的回复丢了。
    我知道你怎么回事了,
    因为字符串丢失了换行符,只有回车符了。你的跟踪有问题,我刚从新看的时候才发现的,其实跟踪立刻就知道,sfile是在输出前还是看起来正确的,只是输出效果不对,所以可以知道原因。
      

  7.   

    我也试过,好像是输出整个文件,版本应该不是问题,按  happyegg(快乐蛋) 的方法没问题,可是他还没给我讲解为什么跟踪没问题,嘿嘿!!!1
      

  8.   

    感谢 happyegg(快乐蛋)   swinging(山不在高) 特别是 swinging(山不在高) 的耐心讲解,呵呵 :)当然还有其他回答的朋友,都很感谢你们!!!!
      

  9.   

    为什么跟踪没问题?你照如下的程序来跟踪
    (1)
    while(raf.getFilePointer ()<raf.length ())
    {
    String ssf = raf.readLine ();
    byte[] bb = ssf.getBytes();
    sfile=sfile.append(ssf);
    }
    (2)
    byte[] fileByte = null;
    long fileLen = 0;
    fileLen = raf.length();
    fileByte = new byte[(int)fileLen];
    raf.read(fileByte);你可以对比一下byte[] bb和byte[] fileByte有什么不同。
    用readLine的方法读出来就少了byte 10,13(换行,回车)
    你再用循环把byte豆大出来,说明跟踪也是有问题的