L'exécution d'un programme Java avec l'entrée d'un fichier
-
19-09-2019 - |
Question
Je suis en train d'écrire un programme qui lit l'entrée d'un fichier, puis imprime à l'écran. Quand je lance sans prendre l'entrée du fichier, il fonctionne parfaitement bien. Cependant, chaque fois que je tente de l'exécuter à partir du fichier, il me donne une « Exception dans le thread « principal » java.util.NoSuchElementException: Aucune ligne trouvée à » erreur qui se produit chaque lieu l'entrée est supposé être lu. Je ne sais pas ce qui se passe.
Ce programme est supposé prendre l'entrée de l'utilisateur, créer un objet photo, puis imprimez les informations à l'écran. Tout fonctionne très bien quand je suis entrée, mais les informations manuellement lorsque je tente d'utiliser java Phototest
à java.util.Scanner.nextLine (Scanner.java:1516)
à PhotoTest.readPhoto (PhotoTest.java:31)
à PhotoTest.main (PhotoTest.java:74)
Mon code qui a l'entrée:
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));
}
}
}
La solution
Tout fonctionne bien quand je suis entrée, mais les informations manuellement lorsque je tente d'utiliser
java PhotoTest < test.dat
pour obtenir l'entrée pour [sic?] Un fichier [...]
Est-ce que test.dat
contiennent les confirmations de "y"
aussi? Lorsque vous conduit dans un fichier pour stdin
, le contenu de ce fichier doit être au format juridique que si elle a été saisie manuellement.
En outre, vous créez une autre instance de Scanner
pour stdin
même si on est déjà passé à readPhoto
. Êtes-vous sûr que vous devez faire cela?
Autres conseils
Dans votre fichier, vous avez besoin d'un retour chariot dans la dernière ligne. Ce serait l'équivalent de ce que vous tapez manuellement. Notez que lorsque vous tapez, dans la dernière ligne vous appuyez sur Entrée.