2013-04-19 4 views
0

그래서 파일을 구문 분석하고 명령을 읽으려고하는이 클래스를 작성하려고합니다.bufferedreader 스트림에서 globaly 읽기

저는 스트림을 열어 아무것도하지 말고 싶습니다. 다른 클래스 메서드에서 파일을 구문 분석하는 동안. 하지만 내가 만든 메서드에서 파일을 읽으려고 할 때 nullpointerexception이 발생합니다.

도움 apprecated합니다 : D를 테스트하는 내 주요 예외 추적

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) 
+0

스택 트레이스를 보여주세요 !! 더 나은 진단에 도움이 될 것입니다 – Rohit

+0

@Rohit, 거기에 지금 추가했습니다 –

+0

public Parser (String filename) throws FileNotFoundException { FileInputStream fstream = new FileInputStream (_filename); 은 이어야합니다. FileInputStream fstream = new FileInputStream (filename); // _filename이 아님 – Chandu

답변

0

코드

의이 조각에서보세요을 +

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 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 * 그러므로 클래스 수준 변수는 결과 여전히 널 NullPointerException

+0

텍스트 파일을 읽는 데 DataInputStream을 사용하지 마십시오. 필요하지 않으므로 사람들이이 코드를 복사 할 수 있으므로 제거하십시오. –

0

기본적으로 생성자 내에 "_input"이라는 새로운 BufferedReader 객체를 정의하고 있습니다. 당신은 생성자를 호출 한 후에 생성자 밖에서 "_input"을 인스턴스화한다고 생각합니다. 하지만 당신은 그렇지 않습니다. 그것은 null을 말합니다. 그것이 NullPointerException을 얻는 이유입니다. 올바른 개체를 참조하려면 생성자 내부의 "_input"앞에 "BufferedReader"를 제거하면됩니다.

관련 문제