黑马程序员技术交流社区

标题: 为什么会有那么大的空白 [打印本页]

作者: 请备注    时间: 2014-4-7 13:17
标题: 为什么会有那么大的空白
import java.io.*;


class FileReaderDemo
{
    public static void main(String[] args)throws IOException
    {
        //创建一个读取流文件,并指定关联文件。如果文件不存在会发生FileNotFoundException。
        FileReader fr = new FileReader("demo.txt");

        int ch1 = fr.read();

        sop("ch1="+ch1);

        int ch2 = fr.read();

        sop("ch2="+ch2);

        int ch3 = fr.read();

        sop("ch3="+ch3);

        char[] cbuf = new char[1024];
       
        int length = 0;
       
        while((length=fr.read(cbuf))!=-1)
            sop("length="+length+"......"+new String(cbuf));

        sop(fr);
            
    }
        public static void sop(Object obj)
        {
            System.out.println(obj);
        }

}

C:\Users\Administrator\Desktop
作者: 请备注    时间: 2014-4-7 13:24
图片附上

J]]@KISGHSM6C5Q1RXLQ2DO.jpg (16.04 KB, 下载次数: 27)

J]]@KISGHSM6C5Q1RXLQ2DO.jpg

作者: zhangbingyuan    时间: 2014-4-7 14:32
问题出在这里:sop("length="+length+"......"+new String(cbuf));

由于你定义了一个字符数组 char[] cbuf = new char[1024];但是文件中只有前面的那些数据。然后你直接把整个字符数组输出,后面肯定是空白啊。你可以改写为这样就行了
sop("length="+length+"......"+new String(cbuf,0,length));//由于length代表了你一共读取了多少个字符。
当你输出的时候使用 new String(buf[] , int start, int end);这种格式,可以将字节数组buf中从start到end之间的字符提取为字符串。就是这样啦。希望能够帮到你。
作者: 为你而去    时间: 2014-4-7 20:50
呵呵,又碰到一个跟我犯同样错误的。
sop("length="+length+"......"+new String(cbuf)
数组定义长度是char[] cbuf = new char[1024],1024个字符,没有的就会填空白,
所以你输出时使用 new String(cbuf,0,cbuf.length),就不会空白了

作者: 请备注    时间: 2014-4-7 21:00
zhangbingyuan 发表于 2014-4-7 14:32
问题出在这里:sop("length="+length+"......"+new String(cbuf));

由于你定义了一个字符数组 char[] cbuf ...

额  知道了




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