Как правильно обрабатывать это IOException? - PullRequest
0 голосов
/ 05 февраля 2012
public void tokenize(){
    // attempt creating a reader for the input
    reader = this.newReader();

    while((line = reader.readLine())!=null){
        tokenizer = new StringTokenizer(line);
        while(tokenizer.hasMoreTokens()){
            toke = (tokenizer.nextToken().trim());
            this.tokenType(toke);
            //System.out.println(this.tokenType(toke));
        }   

    }
}

private BufferedReader newReader(){
    try {//attempt to read the file
        reader = new BufferedReader(new FileReader("Input.txt"));   
    }

    catch(FileNotFoundException e){
        System.out.println("File not found");
    }
    catch(IOException e){
        System.out.println("I/O Exception");
    }
    return reader;
}

Я думал, что обработал его в newReader (), но он, кажется, недоступен. Eclipse рекомендует броски, но я не понимаю, что они делают, или даже решают проблему?

Ценю помощь!

1 Ответ

1 голос
/ 05 февраля 2012

Если вы не знаете, как обрабатывать IOException в этом методе, то это означает, что метод не отвечает за его обработку, и поэтому он должен быть вызван методом.

Считыватель должен быть закрыт в этом методе, так как этот метод открывает его:

public void tokenize() throws IOException {
    BufferedReader reader = null;
    try {
        // attempt creating a reader for the input
        reader = this.newReader();
        ...
    }
    finally {
        if (reader != null) {
            try {
                reader.close();
            }
            catch (IOException e) {
                // nothing to do anymore: ignoring
            }
        }
    }
}

Кроме того, обратите внимание, что если ваш класс сам по себе не является своего рода Reader, оборачивающим другого читателя,таким образом, есть метод close, читатель не должен быть полем экземпляра.Это должна быть локальная переменная, как показано в моем примере.

...