A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李娟 黑马帝   /  2011-12-21 18:46  /  2259 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李娟 于 2011-12-22 09:13 编辑

import java.io.*;
class FileReaderDemo2
{
        public static void main(String[] args) throws IOException
        {
                FileReader fr = new FileReader("demo.txt");
                char[] buf = new char[3];
                int num = fr.read(buf);
                System.out.println("num="+num+"..."+new String(buf));
                //上面这行中num是指长度还是字符所对应的整数值
                fr.close();
        }
}

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

4 个回复

倒序浏览
先回答你的问题:对应的装进去有效数据的所占的数组位的个数
我觉得 char[] buf = new char[3];
这个定义的有点小了,可能每次返回的都是3,一般如果想用数组做缓冲区的话
建议数组的长度最好是1024的整数倍,即最少定义1K,这样才能起到缓冲的效果

最好加上循环,这样的话,能保证把文件读完,而你目前只能读3个字节
应该这样写
        FileReader fr = new FileReader("demo.txt");
                char[] buf = new char[1024];
                int num = 0;
                while((num=fr.read(buf))!=-1)
              {
                 S.O.P(new String(buf,0,num));
               }

               fr.close();

回复 使用道具 举报
刘旭 黑马帝 2011-12-21 19:14:02
藤椅
其实,这些应该多查查API
回复 使用道具 举报
Read(char[] chr)方法从指定的文件读chr.length到chr字符数组中,如果chr.length大于文件中的字符长度,则数据全部放在chr数组中;如果chr.length < 文件中字符长度,读一次,就写人chr.length的数据,下次度接着上次读到的末尾继续读,并将第上一次写入的数据覆盖掉,如果再读到某次时,要读入的文件的数据长度〈 str.length,就依次覆盖,没有覆盖到的仍是上一次覆盖后的数据。
这里我们可以用: Read(char[] chr , int start , int len)解决数据多余的问题。
chr.length大于文件中的字符长度 : 返回实际读入的长度
chr.lenght小于或等于文件中的字符长度 : 任是返回实际读入的长度(此时就是chr.length)

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
int num = fr.read(buf);
在这里,文件字符输入流对象fr通过调用read方法将读取的内容存储在已经分配好的缓冲buf中,返回的int型数据num值得就是读取的内容的自己数组长度。
其实通过for循环我们可以验证一下。
详细内容可以看一看毕向东老师关于Java IO的讲解......
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马