从文本文件Javafx中顺序读取

Sequential reading from a textfile Javafx

正在尝试从文本文件中按顺序读取。但是,目前,单击按钮时只会读取最后一行。我想一个接一个地阅读文本文件中的所有问题。这是我的代码:

   buttonNext.setOnAction(new EventHandler<ActionEvent>(){
    public void handle(ActionEvent E){

       java.io.File inFile = new java.io.File("QuestionSheet.txt");


       try {
           java.util.Scanner input = new java.util.Scanner(inFile);

            while (input.hasNext()){
                String[] lineOfCsv = input.nextLine().split(",");
                questionLabel.setText(lineOfCsv[0]);
                aRadio.setText(lineOfCsv[1]);
                bRadio.setText(lineOfCsv[2]);
                cRadio.setText(lineOfCsv[3]);
                dRadio.setText(lineOfCsv[4]);


            }

        } catch (java.io.IOException ex){
        System.out.println("Error reading file " + ex.toString());
        }

       buttonNext.setText("Next Question");

    }
    });

使用缓冲区reader和输入流逐行读取,原因是缓冲区reader包含一个默认的读取行函数。这很有帮助。

buttonNext.setOnAction(new EventHandler<ActionEvent>(){
public void handle(ActionEvent E){
try{
FileInputStream fstream = new FileInputStream("QuestionSheet.txt");
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
while ((strLine = br.readLine()) != null)   {
  System.out.println (strLine);
  String[] lineOfCsv = strLine.split(",");
  questionLabel.setText(lineOfCsv[0]);
  aRadio.setText(lineOfCsv[1]);
  bRadio.setText(lineOfCsv[2]);
  cRadio.setText(lineOfCsv[3]);
  dRadio.setText(lineOfCsv[4]);
}
in.close();
}catch (Exception e){
  System.err.println("Error: " + e.getMessage());
}

要单独阅读每一行,请保留对 Scanner 的引用,并且每次单击按钮仅调用一次 nextLine。但是,这很难确保 Scanner 始终正确关闭。将行读取到 List<String> 并遍历它可能会更简单:

Path filePath = Paths.get("QuestionSheet.txt");
List<String> lines = Files.readAllLines(filePath); // using nio for simplicity here

buttonNext.setOnAction(new EventHandler<ActionEvent>(){

    // iterator for stepwise iterating through the list
    private final Iterator<String> iterator = lines.iterator();

    @Override
    public void handle(ActionEvent event){
        if (iterator.hasNext()) {
            String[] lineOfCsv = iterator.next().split(",");
            questionLabel.setText(lineOfCsv[0]);
            aRadio.setText(lineOfCsv[1]);
            bRadio.setText(lineOfCsv[2]);
            cRadio.setText(lineOfCsv[3]);
            dRadio.setText(lineOfCsv[4]);
            buttonNext.setDisable(!iterator.hasNext());
        }

    }
});