黑马程序员技术交流社区

标题: Java io流问题 [打印本页]

作者: 黑马—陈磊    时间: 2012-6-11 19:31
标题: Java io流问题
public class ReadereTest {
public static void main(String[] args) throws IOException {
  try {
    Reader is=new FileReader("d:\\tet.txt");
                                 int i=0;
  while ((i=is.read())!=-1) {
     System.out.print((char)i);
  }
  is.close();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
    }  
  }
}
i是int ,然而is.read()视乎读到的是一个数据字节,数据字节是一个int类型吗?
作者: 赵兵锋    时间: 2012-6-11 19:36
FileReader来读取字符文件的便捷类,其read方法返回的数据类型是int型。
作者: 孙峰    时间: 2012-6-11 19:38
你查阅下API就知道了,这里的read()方法,返回的是读取的的字符的ascii值,当读取完后,再读取时就返回—1,还有:这里是FileReader()是Reader()的子类,是操作字符流的类,不是字节。
作者: 王月    时间: 2012-6-11 21:15
Reader is=new FileReader("d:\\tet.txt");

先说一下,Reader Writer是字符流,InputStream OutputStream是字节流。因为要创建对象,所以LZ这里的Reader应该是FileReader。
既然是用FileReader来将要读取的字符串路径封装进对象,所以肯定是用的字符流。而字符流的读取过程中,肯定会读到结尾,这时就需要返回一个值来表示已经到结尾了。read()方法就是以int类型的-1来表示已读到结尾的
int i=0;
while ((i=is.read())!=-1) {
所以说这里的 i 只是为了作为结尾的标记存在的,read读取的当然是字符数据。LZ应该明白了吧,呵呵。
                              
作者: 王广丛    时间: 2012-6-11 21:35
因为是字符流,所以返回的肯定是字符这是毫无疑问的,但是,当读取完毕之后,就返回-1,以表示读取完毕。其API解释如下:
public int read()
         throws IOException读取单个字符。

覆盖:
类 Reader 中的 read
返回:
读取的字符,如果已到达流的末尾,则返回 -1




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