我正在尝试在文件中写入一些数据,它写道。但是在重新启动时,它会删除内部的所有内容,然后再次写入。无法找出问题所在。
我还为文件找到了类似“deleteOnClose”的方法,但它没有被设置!所以默认情况下不应该这样做。
提前感谢您的帮助。
这是代码:
主要
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());
}
}
}
});
}
}
答案 0 :(得分:5)
在此处添加true
final BufferedWriter yazici=new BufferedWriter(new FileWriter(dosya, true));
指定要附加到文件(这是doc)。
答案 1 :(得分:3)
你写的是覆盖所有以前的数据,你需要写入追加模式
这是一个如何: 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 :(得分:2)
您应该在代码中进行两次更改。
有几个人已经提到过第一个:
final BufferedWriter yazici=new BufferedWriter(new FileWriter(dosya, true));
第二次更改:您应该评论以下一行:
final Formatter yaz=new Formatter(dosya);
使用构造函数Formatter(File file)创建Formatter
实例时,
如果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();
}
}
});
}
}
答案 3 :(得分:0)
你需要这样的东西:
FileWriter fileWriter = new FileWriter(dosya,true);
BufferedWriter bufferWriter = new BufferedWriter(fileWriter);
您不断覆盖您的文件而不是附加。
答案 4 :(得分:0)
如果我没有弄错的话,这行代码File dosya=new File("dizi_listesi.txt");
保证你每次都会覆盖文件。