Java CSV更新程序未保存更新的TableModel

Java CSV更新程序未保存更新的TableModel,java,csv,Java,Csv,这是我用于csv编辑器的代码?它读取csv文件并显示在自定义表中,允许编辑,但我无法保存和更新它 import java.io.*; import java.util.*; import javax.swing.*; import javax.swing.table.*; public class T1Data { public static void main(String[] args) { try { String path = S

这是我用于csv编辑器的代码?它读取csv文件并显示在自定义表中,允许编辑,但我无法保存和更新它

import java.io.*;
import java.util.*;

import javax.swing.*;
import javax.swing.table.*;


public class T1Data {

    public static void main(String[] args) {
        try {

            String path = System.getProperty("user.dir");

            String csvName = "effects";

            String datafile = path+"/files/logic/"+csvName+".csv";
            FileReader fin = new FileReader(datafile);
            DefaultTableModel m = createTableModel(fin, null);
            JFrame f = new JFrame();
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            JTable table = new JTable(m);
            JScrollPane stable = new JScrollPane (table);
            stable.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
            stable.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
            table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);

            f.getContentPane().add(stable);
            f.setSize(1000, 600);
            f.setVisible(true);

            toExcel(m, new File(path+"/files/logic/"+csvName+".csv"));

        } catch (Exception e) {
            e.printStackTrace();
        }
    }



    public static void toExcel(TableModel model, File file){
        try{
            FileWriter excel = new FileWriter(file);

            for(int i = 0; i < model.getColumnCount(); i++){
                excel.write(model.getColumnName(i) + ",");
            }

            excel.write("\n");

            for(int i=0; i< model.getRowCount(); i++) {
                for(int j=0; j < model.getColumnCount(); j++) {
                    excel.write(model.getValueAt(i,j).toString()+",");
                }
                excel.write("\n");
            }

            excel.close();

        }catch(IOException e){ System.out.println(e); }
    }



    public static DefaultTableModel createTableModel(Reader in, Vector<Object> headers) {
        DefaultTableModel model = null;
        Scanner s = null;

        try {
            Vector<Vector<Object>> rows = new Vector<Vector<Object>>();
            s = new Scanner(in);

            while (s.hasNextLine()) {
                rows.add(new Vector<Object>(Arrays.asList(s.nextLine().replace('"',' ') .split("\\s*,\\s*",-1))));
            }

            if (headers == null) {
                headers = rows.remove(0);
                model = new DefaultTableModel(rows, headers);
            } else {
                model = new DefaultTableModel(rows, headers);
            }

            return model;
        } finally {
            s.close();
        }
    }
}
import java.io.*;
导入java.util.*;
导入javax.swing.*;
导入javax.swing.table.*;
公共类数据{
公共静态void main(字符串[]args){
试一试{
字符串路径=System.getProperty(“user.dir”);
字符串csvName=“effects”;
字符串datafile=path+“/files/logic/”+csvName+“.csv”;
FileReader fin=新的FileReader(数据文件);
DefaultTableModel m=createTableModel(fin,null);
JFrame f=新的JFrame();
f、 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JTable table=新的JTable(m);
JScrollPane stable=新的JScrollPane(表);
stable.setVerticalScrollBarPolicy(JScrollPane.VERTICAL\u SCROLLBAR\u ALWAYS);
stable.setHorizontalScrollBarPolicy(JScrollPane.HorizontalScrollBar\uAlways);
table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
f、 getContentPane().add(稳定);
f、 设置大小(1000600);
f、 setVisible(真);
toExcel(m,新文件(path+//files/logic/“+csvName+.csv”);
}捕获(例外e){
e、 printStackTrace();
}
}
公共静态void toExcel(表模型、文件){
试一试{
FileWriter excel=新的FileWriter(文件);
对于(int i=0;i
它将打开effects.csv文件并按如下方式显示:

然后,它允许我编辑值,但不保存。我希望当我关闭窗口时,它会保存,但我无法让它工作。我还将添加一个按钮,以便稍后保存


如何才能使保存和更新工作正常?

我会添加一个JButton,可能是一个JToolBar,或者是一个JMenuItem添加到JMenuBar上的一个JMenu,当被触发时,它会调用toExcel方法,但这会解决编辑不保存的问题吗?@MadProgrammerYes,因为Swing和其他GUI一样,它是事件驱动的。在当前代码中,当您调用toExcel时,实际上还没有修改任何内容