Pergunta

Eu estou escrevendo um programa que lê a entrada de um arquivo e, em seguida, imprime-lo para a tela. Quando eu executá-lo sem ter a entrada do arquivo, ele funciona perfeitamente bem. No entanto, cada vez que eu tentar executá-lo a partir do arquivo dá-me um "Exception in thread 'main' java.util.NoSuchElementException: Nenhuma linha encontrada em" erro que ocorre todos os lugares a entrada é supor para ser lido. Eu não tenho idéia o que está acontecendo.

Este programa é suposto tomar a entrada do usuário, criar um objeto de Foto e, em seguida, imprimir as informações para a tela. Tudo funciona muito bem quando estou inserindo as informações manualmente, mas quando tento usar java fototeste Exception in thread "main" java.util.NoSuchElementException: Nenhuma linha constatada
em java.util.Scanner.nextLine (Scanner.java:1516)
em PhotoTest.readPhoto (PhotoTest.java:31)
em PhotoTest.main (PhotoTest.java:74)

Meu código que tem entrada:

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));
        }

    }
}
Foi útil?

Solução

Tudo funciona muito bem quando estou inserindo as informações manualmente, mas quando tento usar java PhotoTest < test.dat para obter a entrada para [sic?] Um arquivo [...]

O test.dat conter as confirmações "y" também? Quando você canaliza em um arquivo para stdin, o conteúdo desse arquivo deve estar no formato legal como se fosse digitado manualmente.


Além disso, você está criando outra instância Scanner para stdin mesmo que um é já passado para readPhoto. Tem certeza que você precisa fazer isso?

Outras dicas

Em seu arquivo você precisa de um retorno de carro na última linha. Isso seria o equivalente ao que você está digitando manualmente. Note que quando você está digitando, na última linha que você pressione enter.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top