Execução de um programa Java com a entrada de um arquivo
-
19-09-2019 - |
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
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));
}
}
}
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.