黑马程序员技术交流社区

标题: JAVA文件流中Read()函数的问题 [打印本页]

作者: 范明正    时间: 2011-9-3 00:46
标题: JAVA文件流中Read()函数的问题
import java.io.*;

public class TextFileReaderLine
{
        String filename;
        FileReader fw;

        public TextFileReaderLine(String f)
        {
                filename = f;
                try
                {
                        fw = new FileReader(new File(f));
                } catch (IOException e)
                {
                }
        }

        public void readLine()
        {
                char ch = '\u0000';
                try
                {
                        while (ch != -1)
                        {
                                ch = (char) fw.read();
                                System.out.print(ch);
                        }
                } catch (IOException e)
                {
                        System.out.print("Error!");
                }
        }

        public static void main(String args[])
        {
                TextFileReaderLine frs = new TextFileReaderLine("text1.txt");
                frs.readLine();
        }
}

Exception in thread "main" java.lang.NullPointerException
        at TextFileReaderLine.readLine(TextFileReaderLine.java:27)
        at TextFileReaderLine.main(TextFileReaderLine.java:39)
就是Read()函数与ReadLine()函数的调用问题,其实质是未实例化的调用,但是怎么修改呢?还是因为其他的错误呢??O(∩_∩)O谢谢!
作者: 匿名    时间: 2011-9-3 08:46
while (ch != -1) =while(true)
你的这个这个程序我只是改了一下   text1.txt》》》d:\\text1.txt
改成我硬盘的绝对路径
运行没问题
只不过读完text1.txt,他还无限读了好多
显示??????????????????????
作者: 匿名    时间: 2011-9-3 09:06
你要先判断一下text1.txt这个文件存不存在,如果没有就要新创建一个
作者: 李治    时间: 2011-9-3 15:36
标题: 回复 楼主 的帖子
我修改了一下,你可以看一看
import java.io.*;

class TextFileReaderLine {
        private FileReader fw;
        // filename就没有用到,就删掉了。
        public TextFileReaderLine(String f) {
                try {
                        fw = new FileReader(new File(f));
                } catch (IOException e) {
                }
        }

        public void readLine() {
                // 在这里不要改变返回值的类型,最好定义为int
                int readChar = 0;
                try {
                        while (readChar != -1) {
                                readChar = fw.read();
                                // 如果你将readChar定义为char,-1转为char就是空白,然后在转为int就是65535
                                // 就会一直执行,不停止,显示乱码。
                                if (readChar == -1) {
                                        break;
                                }
                                // 打印的时候才转为char
                                System.out.print((char) readChar);
                        }
                } catch (IOException e) {
                        System.out.print("Error!");
                } finally {
                        // 重要的一点,用完之后,记得close你打开的文件,这是不容忽视的。
                        try {
                                fw.close();
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                }
        }

        public static void main(String args[]) {
                TextFileReaderLine frs = new TextFileReaderLine("d:\\1.txt");
                frs.readLine();
        }
}
现在就没什么问题了,关键的地方写了注释,应该可以看懂了,好好理解一下。
[ 本帖最后由 李治 于 2011-09-03  18:44 编辑 ]




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