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 Excepción en hilo java.util.NoSuchElementException "principal": No se encontró línea
  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));
        }

    }
}
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top