在 JFrame 窗体中使用缓冲编写器打印 ArrayList (Java)

Printing an ArrayList using buffered writer in JFrame Form (Java)

我有这三种方法,我正在尝试使用缓冲写入器将三个列表的内容写入文件。

第一种方法:保存文件:

public static String showSaveDialog()
    {
        
        String fileName = "";
        JFileChooser chooser = new JFileChooser();
        
        // Suggesting a name
        chooser.setSelectedFile(new File("fileToSave.txt"));
        int resultValue = chooser.showSaveDialog(null);

        if (resultValue == JFileChooser.APPROVE_OPTION) {
            fileName = chooser.getSelectedFile().getAbsolutePath();
            Path = chooser.getSelectedFile().getAbsolutePath();
        }
        
        writeToTextFile(fileName, "");
        
        return fileName;
    }

第二种方法:写入文件:

public static void writeToTextFile(String filePath, String toWrite) 
    {

        BufferedWriter writer = null;
        
        try {
            writer = Files.newBufferedWriter(Paths.get(filePath),
                    StandardOpenOption.CREATE);
            
            writer.write(toWrite);
            writer.newLine();
            writer.close();
        } 
        
        catch (IOException ex) {
            JOptionPane.showMessageDialog(null, 
                    "Saving File Error: " + ex.getMessage(),
                    "Saving File Error", JOptionPane.ERROR_MESSAGE);
        }        
    }

第三种方法:将三个列表的内容写入文本文件:

public void saveAllQuestions() {       
        
        for (String q : questionList){
            FileIO.writeToTextFile(FileIO.Path, "$" + q);
            
            for (int i = 0; i < answerList.size(); i++) {
                FileIO.writeToTextFile(FileIO.Path, 
                        answerList.get(i) + ", " + correctAnswers.get(i));
            }
        }
    }

写入文件时,最后一行是唯一显示的。我假设这个问题是由于它只写一行而不是写在另一行下面。有人可以给我一些见解吗?谢谢

您正在为您编写的每一行打开和关闭文件。每次写一行时,您都会删除文件的先前版本并将其替换为该行。您需要打开文件,写入所有行,然后关闭文件。