繁体   English   中英

从缓冲读取器流全局读取

[英]reading from a bufferedreader stream globaly

所以我试图写这个类来解析文件并从中读取命令。

我想让ctor打开流,什么也不做。 而我在其他类方法中解析文件。 但是,当我尝试使用自己制作的方法读取文件时,出现了nullpointerexception异常。

帮助将不胜感激:D

public class Parser {
private BufferedReader _input;
private String _command;

public Parser(String filename) throws FileNotFoundException {
    FileInputStream fstream = new FileInputStream(filename);

    BufferedReader _input = new BufferedReader(new InputStreamReader(fstream));
}

public boolean hasMoreCommands() throws IOException {

    String line;
    if ( (line = _input.readLine()) != null) {
        return true;
    } else {
        _input.close();
        return false;
    }
}

public void advance() throws IOException {
    String line;
    do {
        line = _input.readLine().trim();
    } while (line.equals("") || line.substring(0,2).equals(COMMENT_SIGN)); 

    String[] splittedLine = line.split(COMMENT_SIGN);
    _command = splittedLine[0];
    _command = _command.replace(" ", ""); 
}

我的主要测试工具+异常跟踪

public static void main(String[] args) throws IOException {
    Parser input = null;
    input = new Parser("D:\\test.asm");
    System.out.println( input.hasMoreCommands());

}

Exception in thread "main" java.lang.NullPointerException
at nand6.Parser.hasMoreCommands(Parser.java:40)
at nand6.Parser.main(Parser.java:116)

看看这段代码

public Parser(String filename) throws FileNotFoundException {
FileInputStream fstream = new FileInputStream(_filename);

BufferedReader _input = new BufferedReader(new InputStreamReader(fstream));
}

更改

BufferedReader _input = new BufferedReader(new InputStreamReader(fstream));

_input = new BufferedReader(new InputStreamReader(fstream));

您的错误:您正在创建另一个* BufferedReader _input *类型的局部变量,因此您的类级别变量仍然为null,从而导致NullPointerException

您基本上是在构造函数中定义一个新的BufferedReader对象,称为“ _input”。 您认为在调用构造函数之后,您在构造函数外部实例化了“ _input”。 但是您不是,它指的是null。 这就是为什么您得到NullPointerException的原因。 只需删除构造函数中“ _input”前面的“ BufferedReader”,即可引用正确的对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM