0

这是我的代码。当我按下按钮时,它只能在文件中写入一行,但是,如果我用一组新字符再次按下它,它只会删除旧字符并存储新的字符集。我不知道如何让它在每次按下按钮时在不同的行中写入字符而不删除其他行

package datasaving;

import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.*;


public class Datasaving {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        JPanel panel = new JPanel();
        JFrame frame = new JFrame();
        final JTextField input = new javax.swing.JTextField(20);

        JButton save = new javax.swing.JButton("Write");

        frame.add(panel);
        frame.setSize(200,200);
        panel.add(input);
        panel.add(save);


        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.setVisible(true);

        save.addActionListener(new ActionListener() {
                            @Override
                            public void actionPerformed(ActionEvent e) {
                                 File file = new File("data.dat");

    try {
            try (FileWriter writer = new FileWriter(file)) {

                writer.write(input.getText()+"\n");

            }
        System.out.println("Game saved");
    } catch (IOException | HeadlessException z) {
        JOptionPane.showMessageDialog(null, e);
    }

                            } 
                        });


    }
}
4

2 回答 2

2

您需要FileWriter通过构造函数设置附加..

FileWriter writer = new FileWriter(file, true)

文档

于 2012-08-13T16:02:56.240 回答
1

哇,在一个声明中发生了很多事情。这不是我最喜欢的处理方式,但这不是你的问题.. :-) 当你创建一个新的 FileWriter 时,它会创建一个新文件,所以你只能看到一行文本。

看看 API - FileWriter 有一个构造函数,它接受一个布尔值来决定是否追加。你想用它来代替。

另一种选择是打开文件一次,然后每次按下都写入它。如果您希望在每次写入时打开/关闭文件,那么使用另一个 ctor 是更好的方法。

于 2012-08-13T16:06:17.753 回答