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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 范明正 黑马帝   /  2011-9-3 00:46  /  2831 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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谢谢!

3 个回复

倒序浏览
黑马网友  发表于 2011-9-3 08:46:53
沙发
while (ch != -1) =while(true)
你的这个这个程序我只是改了一下   text1.txt》》》d:\\text1.txt
改成我硬盘的绝对路径
运行没问题
只不过读完text1.txt,他还无限读了好多
显示??????????????????????

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
黑马网友  发表于 2011-9-3 09:06:32
藤椅
你要先判断一下text1.txt这个文件存不存在,如果没有就要新创建一个

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报

回复 楼主 的帖子

我修改了一下,你可以看一看
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 编辑 ]

评分

参与人数 1技术分 +2 收起 理由
wangfayin + 2 不错啊,继续努力!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马