Написать в файл, но удалить при выходе? - PullRequest
2 голосов
/ 17 февраля 2012

Я пытаюсь записать некоторые данные в файл, пишет.Но при перезагрузке он удаляет все, что внутри, и пишет снова.Не смог выяснить что не так.

И я также нахожу метод вроде «deleteOnClose» для файла, но он не был установлен!Поэтому он не должен делать это по умолчанию.

Спасибо за вашу помощь заранее.

Вот код:

Main:

 public static void class main {

public main(String args[]){

    menu_secim secimObject=new menu_secim();
}
 }

menu_secim:

 public class menu_secim extends JFrame{

private JButton ekle;
private JButton goster;

public menu_secim() {

    super("Karar Anı");
    this.setLayout(new FlowLayout());
    this.setVisible(true);
    this.setSize(350, 150);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocation(500,300);


    ekle=new JButton("Ekle");
    this.getContentPane().add(ekle);

    goster=new JButton("Göster");
    this.getContentPane().add(goster);

    ekle.setBounds(20,20, 100,60);
    goster.setBounds(120, 20, 100, 60);

    butonHareketleri buton=new butonHareketleri();
    ekle.addActionListener(buton);
    goster.addActionListener(buton);

}
private class butonHareketleri implements ActionListener{

    public void actionPerformed(ActionEvent e){

        if(e.getSource()==ekle)
        try
        {               
            new secim_ekle();   
        }
        catch(Exception h)
        {
        System.out.print("hata var");
        }
    }
}
 }

secim_ekle:

public class secim_ekle extends JFrame {

private JButton ekle;

private JLabel dizi_isim;
private JLabel dizi_puan;
private JLabel kaydet;

private JTextField dizi_isim_fd;
private JTextField dizi_puan_fd;

File dosya=new File("dizi_listesi.txt");

public  secim_ekle() throws IOException{


    super("Ekleme işlemi");
    this.getContentPane().setLayout(null);
    this.setVisible(true);
    this.setSize(500, 150);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    this.setLocation(500,300);

    final BufferedWriter yazici=new BufferedWriter(new FileWriter(dosya));
    final BufferedReader okuyucu=new BufferedReader(new FileReader(dosya));

    final Formatter yaz=new Formatter(dosya);
    final Scanner oku=new Scanner(dosya);

    ekle=new JButton("Ekle");
    this.getContentPane().add(ekle);

    dizi_isim=new JLabel("Dizi ismi :");
    this.getContentPane().add(dizi_isim);

    dizi_puan=new JLabel("Dizi puan :");
    this.getContentPane().add(dizi_puan);

    kaydet=new JLabel("Veriler Kaydedildi!");
    kaydet.setVisible(false);
    kaydet.setForeground(Color.RED);
    this.getContentPane().add(kaydet);

    dizi_isim_fd=new JTextField();
    this.getContentPane().add(dizi_isim_fd);

    dizi_puan_fd=new JTextField();
    this.getContentPane().add(dizi_puan_fd);

    dizi_isim.setBounds(10, 10, 100, 20);
    dizi_puan.setBounds(10,40,100,20);
    dizi_isim_fd.setBounds(120,10,200,20);
    dizi_puan_fd.setBounds(120,40,50,20);
    ekle.setBounds(350,10,100,20);
    kaydet.setBounds(350, 40, 200, 40);

    ekle.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){

            if(e.getSource()==ekle){
                try{
                    yazici.write(dizi_isim_fd.getText()+"|"+dizi_puan_fd.getText());
                    yazici.newLine();
                    yazici.close();
                    kaydet.setVisible(true);
                }
                catch(Exception h)
                {
                    System.out.print(h.getMessage());
                }
            }

        }
    });

}
  }

Ответы [ 5 ]

5 голосов
/ 17 февраля 2012

Добавьте true здесь

final BufferedWriter yazici=new BufferedWriter(new FileWriter(dosya, true));

, чтобы указать, что вы хотите добавить к файлу (Вот это doc ).

3 голосов
/ 17 февраля 2012

Вы пишете перезаписывает все предыдущие данные, вам нужно писать в режиме добавления

Вот пример, как: http://www.devdaily.com/java/edu/qanda/pjqa00009.shtml

вместо

final BufferedWriter yazici=new BufferedWriter(new FileWriter(dosya));

использовать

final BufferedWriter yazici=new BufferedWriter(new FileWriter(dosya, true));
2 голосов
/ 17 февраля 2012

Вы должны сделать два изменения в вашем коде.

Первый уже был упомянут несколькими людьми:

final BufferedWriter yazici=new BufferedWriter(new FileWriter(dosya, true));

Второе изменение : вы должны прокомментировать следующую строку:

final Formatter yaz=new Formatter(dosya);

При создании экземпляра Formatter с помощью конструктора Formatter (File file) , если file существует, то будет усечен до нулевого размера .

Работает следующий код:

package q9318686;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Formatter;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class secim_ekle extends JFrame {

    private JButton ekle;
    private JLabel dizi_isim;
    private JLabel dizi_puan;
    private JLabel kaydet;
    private JTextField dizi_isim_fd;
    private JTextField dizi_puan_fd;
    File dosya = new File("dizi_listesi.txt");

    public secim_ekle() throws IOException {

        super("Ekleme işlemi");
        this.getContentPane().setLayout(null);
        this.setVisible(true);
        this.setSize(500, 150);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setLocation(500, 300);

        final BufferedWriter yazici = 
                new BufferedWriter(new FileWriter(dosya, true));
        final BufferedReader okuyucu = 
                new BufferedReader(new FileReader(dosya));

// The following line overrides your file:        
//        final Formatter yaz = new Formatter(dosya);
        final Scanner oku = new Scanner(dosya);

        ekle = new JButton("Ekle");
        this.getContentPane().add(ekle);

        dizi_isim = new JLabel("Dizi ismi :");
        this.getContentPane().add(dizi_isim);

        dizi_puan = new JLabel("Dizi puan :");
        this.getContentPane().add(dizi_puan);

        kaydet = new JLabel("Veriler Kaydedildi!");
        kaydet.setVisible(false);
        kaydet.setForeground(Color.RED);
        this.getContentPane().add(kaydet);

        dizi_isim_fd = new JTextField();
        this.getContentPane().add(dizi_isim_fd);

        dizi_puan_fd = new JTextField();
        this.getContentPane().add(dizi_puan_fd);

        dizi_isim.setBounds(10, 10, 100, 20);
        dizi_puan.setBounds(10, 40, 100, 20);
        dizi_isim_fd.setBounds(120, 10, 200, 20);
        dizi_puan_fd.setBounds(120, 40, 50, 20);
        ekle.setBounds(350, 10, 100, 20);
        kaydet.setBounds(350, 40, 200, 40);

        ekle.addActionListener(new ActionListener() {

            public void actionPerformed(ActionEvent e) {

                if (e.getSource() == ekle) {
                    try {
                        yazici.write(dizi_isim_fd.getText() + "|" 
                                + dizi_puan_fd.getText());
                        yazici.newLine();
                        yazici.close();
                        kaydet.setVisible(true);
                    } catch (Exception h) {
                        System.out.print(h.getMessage());
                    }
                }

            }
        });
    }

    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    new secim_ekle().setVisible(true);
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        });
    }
}
0 голосов
/ 17 февраля 2012

Если я не ошибаюсь, эта строка кода File dosya=new File("dizi_listesi.txt"); гарантирует, что вы будете перезаписывать файл каждый раз.

0 голосов
/ 17 февраля 2012

Вам нужно что-то вроде этого:

FileWriter fileWriter = new FileWriter(dosya,true);
BufferedWriter bufferWriter = new BufferedWriter(fileWriter);

Вы продолжаете перезаписывать свой файл вместо добавления.

...