Предотвращение исключения NoSuchElementException при чтении из файла без лишней строки - PullRequest
1 голос
/ 30 января 2011

Я пытаюсь найти способ справиться с ошибкой NoSuchElementException, генерируемой объектом Scanner при чтении последнего элемента в моем текстовом файле с NO SPARE LINE. Это означает, что мой курсор будет заканчиваться после последнего символа последней строки в файле

Пример:

score.txt

[Test; Слово |]

[&] обозначает начало и конец текстового файла

| где курсор заканчивается.

Я знаю, что если мой курсор заканчивает строку под ним, мой Сканер не сгенерирует исключение NoSuchElementException, потому что есть следующая строка.

Чего я хочу добиться, так это обеспечить, чтобы исключение NoSuchElementException не создавалось при отсутствии запасной строки. Есть ли способ предотвратить возникновение ошибки, кроме проверки наличия резервной линии?

Мой класс Driver просто вызывает метод importWordList () из класса WordGame.

Код для WordGame очень длинный, поэтому я буду загружать только метод importWordList () из класса.

public boolean importWordList(String fileName) throws FileNotFoundException
{
    //Set default return value
    boolean returnVal = false;

    //Set File to read from
    File wordListDest = new File(fileName);

    if (wordListDest.canRead() == true)
    {
        lineS = new Scanner(wordListDest);

        //Read each line from file till there is no line
        while (lineS.hasNextLine())
        {

            //Set delimeter scanner to use delimeter for line from line scanner
            String line = lineS.nextLine();
            delimeterS = new Scanner(line);
            delimeterS.useDelimiter(";");

            //Read each delimeted string in line till there is no string
            while (delimeterS.hasNextLine())
            {

                //Store Variables for quiz object
                wordAndHint = delimeterS.nextLine();
                answer = delimeterS.nextLine();               //ERROR

                //Create Object Quiz and add to wordList
                Quiz addWord = new Quiz(wordAndHint, answer);
                wordList.add(addWord);
            }
            delimeterS.close();
        }
        lineS.close();
        returnVal = true;
        System.out.println("Word List has been Imported Successfully!");
    }
    else
    {
        System.out.println("The file path you selected either does not exist or is not accessible!");
    }
    return returnVal;
}

Ошибка возникает следующим образом:

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1516)
    at mysterywordgame.WordGame.importWordList(WordGame.java:74)
    at mysterywordgame.Main.main(Main.java:60)

Ошибка (в mysterywordgame.WordGame.importWordList (WordGame.java:74)) относится к строке с комментарием ОШИБКА.

Я искал способы предотвращения возникновения ошибки, однако все ответы были такими: «Убедитесь, что в конце текстового файла есть лишняя строка»

Будет полезна помощь.

1 Ответ

2 голосов
/ 30 января 2011

Поскольку вы уже использовали следующую строку с wordAndHint = delimeterS.nextLine();, вы должны снова проверить следующую строку:

if(delimeterS.hasNextLine()){     
   answer = delimeterS.nextLine();     
}else{
   answer = "";
}
...