黑马程序员技术交流社区

标题: 求教:用FileReader读取文件时的错误 [打印本页]

作者: 黑马-王言龙    时间: 2012-6-21 21:59
标题: 求教:用FileReader读取文件时的错误
本帖最后由 wyl530274554 于 2012-6-22 08:28 编辑

G:\\Code\\Hello.txt 文件里有一句话"Hello the Java."
用下在的代码打印了这句话后,还在不停的打印??????????????????????
请问为什么?
  1. import java.io.*;

  2. class FileReaderDemo {
  3.         public static void main(String[] args) throws IOException {
  4.                 FileReader fr = new FileReader("G:\\Code\\Hello.txt");
  5.                 char ch = 0;
  6.                 while((ch=(char)fr.read()) != -1) {
  7.                         System.out.print(ch);
  8.                 }
  9.         }
  10. }
复制代码

作者: 黑马—陈磊    时间: 2012-6-21 22:05
本帖最后由 黑马—陈磊 于 2012-6-21 22:28 编辑

import java.io.*;
class FileReaderDemo {
        public static void main(String[] args) throws IOException {
                FileReader fr = new FileReader("G:\\Code\\Hello.txt");
                char ch = 0;
                while((ch=(char)fr.read()) != -1) {
                        System.out.print(ch);
                }
        }
}

可以这样改:fr.read())返回int型
public static void main(String[] args) throws IOException {
          FileReader fr = new FileReader("G:\\Code\\Hello.txt");
          int i=0;
          while((i=fr.read()) != -1) {
                  
                  System.out.print((char)i);
          }
          System.out.print("结束!");
          fr.close();

作者: 孙浩迪    时间: 2012-6-21 22:28
import java.io.*;

class FileReaderDemo {
        public static void main(String[] args) throws IOException {
                FileReader fr = new FileReader("G:\\Code\\Hello.txt");
                char ch = 0;
                while((ch=(char)fr.read()) != -1) {
                        System.out.print(ch);
                }
        }
}

我试了,你这个代码只打印一次啊, 你的意思是不是读完了程序没有停止?

你可以在读的地方判断一下,然后弄个break; 停止程序
作者: 刘笑    时间: 2012-6-21 22:28
那是一个while循环,三大循环之一。当然不停地打印了,你可以换成if试试
作者: 田建    时间: 2012-6-21 22:33
本帖最后由 田建 于 2012-6-21 22:38 编辑

你这个问题我分析了一下,首先你要明白read()的返回值类型是int,当它读到末尾处的时候返回值是-1,这就是为什么用是否等于-1做判断的原因,而你定义一个字符ch
while((ch=(char)fr.read()) != -1)//这句话前面是字符,不可能=-1,因而会一直打印下去;
改的方法你将char改为int;
具体代码如下:
          int i=0;
          while((i=fr.read()) != -1)
          {
                  
                  System.out.print((char)i);
          }
作者: 杨康    时间: 2012-6-21 22:49
楼上正确,判断条件有问题,两个不同类型的数据。
或者你也可以改成:while((ch=(char)fr.read()) != (char)-1)  试试
作者: 王涛    时间: 2012-6-21 23:09
import java.io.*;

class FileReaderDemo {
        public static void main(String[] args) throws IOException
         {
                           //创建一个文件读取流对象,和指定名称的文件相关联
                                FileReader fr = new FileReader("G:\\Code\\Hello.txt");
               
                                /*int ch = 0;
                while((ch=fr.read()) != -1) {                //这是一种方法,比较简单一点的
                        System.out.print((char)ch);*/
                               
                                while(true)
                                {
                                        int ch = fr.read();
                                        if(ch==-1)
                                                break;            //这也是一种,
                                        System.out.print((char)ch);
                                }                               
        }
}
你那个while循环中的前面是char类型的,后面的是-1,不会停止。
作者: 张华廷    时间: 2012-6-21 23:24
01.import java.io.*;

02.

03.class FileReaderDemo {

04.        public static void main(String[] args) throws IOException {

05.                FileReader fr = new FileReader("G:\\Code\\Hello.txt");

06.                char ch = 0;//ch是char类型,和下句 while((ch=(char)fr.read()) != -1中的int类型,循环不会停止;停止的话可以用break语句停止。

07.                while((ch=(char)fr.read()) != -1) {

08.                        System.out.print(ch);

09.                }

10.        }

11.}
作者: 黑马-王言龙    时间: 2012-6-22 08:12
sunhaodi 发表于 2012-6-21 22:28
import java.io.*;

class FileReaderDemo {

这个问号是什么东西?

TT截图未命名.jpg (220.17 KB, 下载次数: 41)

TT截图未命名.jpg

作者: 黄奕豪    时间: 2012-6-22 10:35
wyl530274554 发表于 2012-6-22 08:12
这个问号是什么东西?

问号是ASCII码表里面对应的-1,就是11111111或者其他不符合码表里面所拥有字符的描述符号。叫做未知符号吧!简单点说,就是码表里面没有的东西,都用问号表示!!你那个在前面加char转型就是转换成ASCII码表里面的内容!!
作者: 李柏旺    时间: 2012-6-22 13:46
(ch=(char)fr.read()) != -1        =-1是表明没有内容可读了  就不会执行while了     。




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