Вопрос

Я пишу программу, которая считывает входные данные из файла, а затем выводит их на экран.Когда я запускаю его, не получая входных данных из файла, он работает отлично.Однако каждый раз, когда я пытаюсь запустить его из файла, он выдает мне «Исключение в потоке «main» java.util.NoSuchElementException:Ошибка «Нет строки найдена», которая возникает в каждом месте, где предполагается чтение входных данных.Я понятия не имею, что происходит.

Предполагается, что эта программа принимает вводимые пользователем данные, создает объект Photo, а затем выводит информацию на экран.Все работает нормально, когда я ввожу информацию вручную, но когда я пытаюсь использовать Java PhotoTest <test.dat, чтобы получить входные данные для файла, выдается это сообщение об ошибке:
Исключение в потоке «основной» java.util.NoSuchElementException:Строка не найдена
в java.util.Scanner.nextLine(Scanner.java:1516)
в PhotoTest.readPhoto(PhotoTest.java:31)
в PhotoTest.main(PhotoTest.java:74)

Мой код, который имеет ввод:

private static Photo readPhoto(Scanner scanner) throws ParseException
{
    Date dateTaken;

    Scanner scan = new Scanner(System.in);

    String subject = scan.nextLine();
    subject = subject.trim();

    String location = scan.nextLine();
    location = location.trim();

    String date = scan.nextLine();
    date = date.trim();
        if (date.equals("")){ //if the date is empty it is set to null
            dateTaken = null;
            }
        else { //if a date is entered, it is then parsed
            DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT);
            dateTaken = df.parse(date);
            }

    String file = scan.nextLine();
    file = file.trim();
    File photoFile = new File(file);

    //creates a Photo object from the information entered
    Photo Photo = new Photo(subject, location, dateTaken, photoFile);

    return Photo;
}

public static void main(String[] args) throws ParseException
{
    boolean endprogram = false;
    Scanner scan = new Scanner(System.in);

    //creates  a loop so that the user may enter as many photos as they wish
    while (!endprogram)
    {
        System.out.println("Would you like to enter a photo (y/n)?");

        //if the input is anything other than y, the program ends
        if(!scan.next().equalsIgnoreCase("y"))
        {
            endprogram = true;
        }
        else 
        {
            System.out.println(readPhoto(scan));
        }

    }
}
Это было полезно?

Решение

Все работает нормально, когда я ввожу информацию вручную, но когда я пытаюсь использовать java PhotoTest < test.dat чтобы получить входные данные для[sic?] файла [...]

Делает test.dat содержать "y" подтверждения тоже?Когда вы передаете файл для stdin, содержимое этого файла должно быть в допустимом формате, как если бы оно было введено вручную.


Кроме того, вы создаете еще один Scanner пример для stdin даже если один из них уже передан readPhoto.Вы уверены, что вам нужно это сделать?

Другие советы

В файле вам нужен возврат каретки в последней строке. Это было бы равносильно тому, что вы набираете вручную. Обратите внимание, что, когда вы набираете, в последней строке нажмите клавишу ВВОД.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top