Возникли проблемы с тем, чтобы правильно прочитать файл для моей последней лабораторной работы в семестре, и у меня постоянно возникают проблемы с чтением реального файла. - PullRequest
0 голосов
/ 25 мая 2019

Итак, у нас есть лаборатория, которая включает чтение файлов и все эти забавные вещи.

Вот как выглядит текстовый файл:

Name0
22
1.2
Name1
22
2.71
Name2
19
3.51
Name3
18
3.91
Name4
20
1.6
Name5
19
1.03
Name6
18
3.78
Name7
19
3.19
Name8
18
2.37
Name9
21
1.01

Я разместилкод, который должен пытаться прочитать эту информацию.Спасибо за ваше время!

Я пытался изменить некоторые вещи и найти исключение, но безуспешно

    public void readFile()
    {
        //ran intill exception caught
        try
        {
            //finds the student.txt file to read using scanners
            Scanner s = new Scanner("Students.txt");

            while(s.hasNextLine())
            {
                //sets a string name to the first string (First text in 
students is name)
                String name = s.next();
                //looks for a line with a int value and then sets it to 
age
                int age = s.nextInt(); 
                //scans the next line for a double and sets it to gpa

                double gpa = s.nextDouble();
                //creates a new student object and passes what the file 
read into parameters
                Student studentOne = new Student(name , age, gpa);
                //adds new student to array list
                students.add(studentOne);
            }
            s.close();
        }
        // if an exception is caught it will print
        catch(Exception e)
        {
            System.out.println(e);
        }
    }

Я полагаю, что оно должно было прочитать информацию и сохранить ее вуважаемая категория, поскольку мы знаем, что она идет в этом порядке на основе текстового файла, но когда я запускаю метод, я получаю java.util.NoSuchElementException

1 Ответ

0 голосов
/ 25 мая 2019

Вы получаете NoSuchElementException, потому что при вызове методов nextInt() и nextDouble() для объекта Scanner не читаются символы новой строки (символ, созданный при нажатии возврата) - см. this ответ.

Чтобы это исправить, вы можете сделать что-то вроде следующего:

public void readFile() throws IOException {
    try (Scanner s = new Scanner(new FileReader(new ClassPathResource("Students.txt").getFile()))) {
        while (s.hasNextLine()) {
            String name = s.nextLine();
            int age = Integer.parseInt(s.nextLine());
            double gpa = Double.parseDouble(s.nextLine());
            Student studentOne = new Student(name, age, gpa);
            students.add(studentOne);
        }
    }
}

Примечание. Приведенный выше код предполагает, что файл Students.txt находится в вашем пути к классам.

...