如何在每次按“写入”按钮时将String行写入文件

时间:2012-08-13 16:00:01

标签: java io save java-io read-write

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

时,我不知道如何使字符写成不同的行
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);
    }

                            } 
                        });


    }
}

2 个答案:

答案 0 :(得分:2)

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

FileWriter writer = new FileWriter(file, true)

docs

答案 1 :(得分:1)

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

查看API - 有一个FileWriter的构造函数,它接受是否附加的布尔值。你想要使用它。

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