Ejecución de un programa Java con el aporte de un archivo
-
19-09-2019 - |
Pregunta
Estoy escribiendo un programa que lee la entrada desde un archivo y luego lo imprime a la pantalla. Cuando lo ejecuto sin tener la entrada del archivo, funciona perfectamente bien. Sin embargo, cada vez que trato de ejecutarlo desde el archivo me da una "Excepción en el hilo 'principal' java.util.NoSuchElementException: No se encuentra en la línea" error que se produce cada lugar la entrada se supone que debe ser leído. No tengo idea de lo que está pasando.
Este programa se supone que debe tomar la entrada del usuario, crear un objeto de fotos, y luego imprimir la información de la pantalla. Todo funciona bien cuando estoy entrando en la información de forma manual, pero cuando trato de usar java FOTOTEST
en java.util.Scanner.nextLine (Scanner.java:1516)
en PhotoTest.readPhoto (PhotoTest.java:31)
en PhotoTest.main (PhotoTest.java:74)
Mi código que tiene de 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));
}
}
}
Solución
Todo funciona bien cuando estoy entrando en la información de forma manual, pero cuando trato de usar
java PhotoTest < test.dat
para conseguir la entrada para [sic] un archivo [...]
¿Tiene test.dat
contener las confirmaciones "y"
también? Cuando se canaliza en un archivo para stdin
, el contenido de ese archivo debe estar en formato legal que si se escribe en forma manual.
Además, va a crear otra instancia Scanner
para stdin
a pesar de que uno ya se pasa a readPhoto
. ¿Seguro que tiene que hacer esto?
Otros consejos
En el archivo se necesita un retorno de carro en la última línea. Ese sería el equivalente a lo que está escribiendo manualmente. Tenga en cuenta que cuando se está escribiendo, en la última línea de pulsar ENTER.