Запуск Java-программы с вводом из файла - PullRequest
0 голосов
/ 13 марта 2010

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

Предполагается, что эта программа принимает данные от пользователя, создает объект Photo и затем выводит информацию на экран. Все работает нормально, когда я ввожу информацию вручную, но когда я пытаюсь использовать java PhotoTest Исключение в потоке "main" 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));
        }

    }
}

Ответы [ 2 ]

3 голосов
/ 13 марта 2010

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

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


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

0 голосов
/ 13 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...