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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 地狱天堂 中级黑马   /  2014-8-10 15:04  /  1764 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 地狱天堂 于 2014-8-12 12:42 编辑

文件的读取的两种方式,见代码。
read() 读取单个字符。返回的是整型。打印时需要转成(char)。
read(char[] cbuf) 将字符读入数组。 是将读取到的字符直接存入字符数组。
问:为何read()不能将读到的字符直接返回字符,打印时还要多做一步转换?
  1. <p>import java.io.FileReader;
  2. import java.io.IOException;</p><p>
  3. public class FileReadDemo {</p><p> public static void main(String[] args) {
  4.   FileReader fr=null;
  5.   //文件的读取方式一:
  6.   try {
  7.    fr=new FileReader("demo.txt");
  8.    int ch=fr.read();
  9.    while((ch=fr.read())!=-1){
  10.     System.out.println("ch="+(char)ch);
  11.    }   
  12.   } catch (IOException e) {
  13.    System.out.println(e.toString());
  14.   }
  15.   finally{
  16.    try {
  17.     fr.close();
  18.    } catch (IOException e) {   
  19.     System.out.println(e.toString());
  20.    }
  21.   }
  22.   
  23.   //文件的读取方式二:
  24.   FileReader fr1=null;
  25.   try {
  26.    fr1=new FileReader("demo.txt");
  27.    char[] ch=new char[1024];
  28.    int num=0;
  29.    while((num=fr1.read(ch))!=-1){
  30.     System.out.println(new String(ch,0,num));
  31.    }
  32.   } catch (IOException e) {
  33.    System.out.println(e.toString());
  34.   }
  35.   finally{
  36.    try {
  37.     fr1.close();
  38.    } catch (IOException e) {   
  39.     System.out.println(e.toString());
  40.    }
  41.   }
  42. }</p><p>}
  43. </p><p> </p>
复制代码

评分

参与人数 1技术分 +1 收起 理由
格子、 + 1 淡定

查看全部评分

3 个回复

倒序浏览
你说的read方法返回int类型不方便,是因为你要打印才会觉得不方便,很多情况读取数据我们都不想打印,比如复制,会多此一举。
回复 使用道具 举报
Java中的char只能取非负值,如果直接返回char,那while((ch=fr.read())!=-1)不是永远不会等于-1,变成死循环了?
回复 使用道具 举报
cs8630323 发表于 2014-8-10 15:23
你说的read方法返回int类型不方便,是因为你要打印才会觉得不方便,很多情况读取数据我们都不想打印,比如 ...

知道了,后面课程有说到FileReader底层用的还是字节流
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马