Java扫描仪一遍又一遍地读取同一个文件



我知道这个问题已经存在了,但到目前为止,解决方案并没有真正帮助我。

我的问题是,我有一个有5行的文件,想把它们准备成一个集合。但是,当我读取扫描程序到达文件的末尾时,它会从一开始就重新开始,直到符合条件时为太多打开的文件抛出错误。

import java.io.*;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Scanner;
public class TerminManager {
String name;
private Collection<Termin> termine;
public TerminManager() {
this.setName("aName");
this.termine = new ArrayList<Termin>();
}
private void setName(String name) {
this.name = name;
}
private String getName(){
return this.name;
}
public void loadTermine(String fileName)
{
FileReader reader = null;
Scanner sc = null;
try
{
reader = new FileReader(fileName);
sc = new Scanner(reader);
} catch (FileNotFoundException e)
{
System.err.println("Datei " + fileName + " nicht gefunden!");
e.printStackTrace();
}
while(sc.hasNext() == true)
{
String zeile = sc.next();
String delims = "[;]";
String[] zeile_feld = zeile.split(delims);
Termin aTermin = new Termin(
zeile_feld[0],
zeile_feld[1],
zeile_feld[2],
zeile_feld[3]);
this.termine.add(aTermin);
}
sc.close();
}
public void printTermine() {
}
}

这是loadTermine被称为的菜单类

import java.util.Scanner;
public class Menu
{

private static TerminManager tManager = new TerminManager();
private static Scanner sc = new Scanner("System.in");

public Menu()
{

}

public static void printMenu()
{
System.out.print("A)t Laden der Verfügbaren Termine aus einer Text-Datein");
System.out.print("B)t Anzeigen der Verfügbaren Terminen");
System.out.print("C)t Anlegen eines neuen Patientenn");
System.out.print("D)t Erfassen einer Impfstoffanlieferungn");
System.out.print("E)t Anzeige der aktuell verfügbaren Impfdosenn");
System.out.print("F)t erfassen einer Impfterminvereinbarung mit einem Patientenn");
System.out.print("G)t Erfassen einer durchgeführten SChutzimpfung auf Basis eines zuvor erstellen Impfterminsn");
System.out.print("H)t Beenden des Programmsn");

System.out.println("Bitte geben Sie den buchstaben des Menue-Punktes ein: ");
}

public static void auswahlMenu(String auswahl)
{
boolean stop = false;
while( stop == false)
{ 
switch(auswahl.toLowerCase())
{
case "a": tManager.loadTermine("Impftermine.txt");break;
case "b":tManager.printTermine();break;
case "c": createPatient();break;
default: System.out.print("Bitte einen Buchstaben zwischen "A" und "H" eingeben!"); stop = false;break;
}
}
}
private static void createPatient() {
}
}

这是测试程序类,其中的主要功能是

import java.util.Scanner;
public class Test {

private static Menu menu = new Menu();
private static Scanner eingabe = new Scanner(System.in);
private static String weiter = "ja";
private static String auswahl ="";

public static void main(String[] args) {
// TODO Auto-generated method stub

while(weiter.equals("ja") || weiter.equals("j"))
{
menu.printMenu();
auswahl = eingabe.next();
menu.auswahlMenu(auswahl);
auswahl.toLowerCase();
if(!auswahl.equals("h"))
{
System.out.println("Moechten Sie weiter machen? (Ja/Nein)");
weiter = eingabe.next();
weiter.toLowerCase();
} else 
{
weiter = "nein";
}


}



}
}

这是我必须读取的代码文件。我在其他帖子中读到in需要使用.next((函数才能工作,但这对我的情况没有帮助。也许我只是愚蠢,做错了。

感谢您的提前帮助!

多亏@RogerLindsjö才发现问题!

问题是auswahlMenu((函数从未结束,因此总是开始读取文件。通过更改条件使while循环结束,它现在可以按预期工作了!

最新更新