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

うわー、それは1つのステートメントで多くのことが起こっています。それを処理する私のお気に入りの方法ではありませんが、それはあなたの質問ではありませんでした.. :-) 新しい FileWriter を作成すると、新しいファイルが作成されるため、テキストは 1 行しか表示されません..

API を見てください - 追加するかどうかのブール値を取る FileWriter のコンストラクターがあります..代わりにそれを使用したいと思います。

別のオプションは、ファイルを一度開いてから、押すたびに書き込むことです。書き込みのたびにファイルを開いたり閉じたりしたい場合は、他のctorを使用する方が良い方法です。

于 2012-08-13T16:06:17.753 に答える