You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java使用JTable重写txt文件时首行丢失的问题如何解决?

问题根因

你在加载文件到JTable的逻辑里,将文件第一行单独读取作为了JTable的列标识符(表头),没有作为行数据存入TableModel,所以执行写回文件操作时,这行数据自然不会被遍历写入,导致首行丢失。

修复方案

方案1:确认文件第一行是表头,需要保留

修改updateActionPerformed方法,在写入行数据之前,先把列名写入文件第一行:

private void updateActionPerformed(java.awt.event.ActionEvent evt) {                                       
    try{
        File file = new File ("logindata.txt");
        if(!file.exists()){
            file.createNewFile();
        }
        
        FileWriter fw = new FileWriter(file.getAbsoluteFile());
        BufferedWriter bw = new BufferedWriter(fw);
        // 新增:先写入表头(列名)
        TableModel model = datatable.getModel();
        for(int j = 0; j < model.getColumnCount(); j++){
            bw.write(model.getColumnName(j) + ",");
        }
        bw.write("\n");
        // 原有写入行数据逻辑
        for (int i = 0; i < model.getRowCount(); i++){
            for(int j = 0; j< model.getColumnCount(); j++){
                bw.write(model.getValueAt(i,j)+",");
            }
            bw.write("\n");
        }
        bw.close();
        fw.close();
       }
    catch(Exception e)
    {
        JOptionPane.showMessageDialog(null,"Error, please retry");
    }
}

方案2:文件无表头,所有行都是业务数据

修改viewbtnActionPerformed加载逻辑,不要把第一行设为列名,直接全部加载为行数据,列名预设为固定值即可:

private void viewbtnActionPerformed(java.awt.event.ActionEvent evt) {                                       
    
    try{
        BufferedReader br = new BufferedReader(new FileReader("logindata.txt"));
        DefaultTableModel model = (DefaultTableModel)datatable.getModel();
        // 新增:设置固定列名,不再读取文件第一行当表头
        model.setColumnIdentifiers(new String[]{"用户名","密码"}); // 可根据实际业务调整列名
        model.setRowCount(0);
        // 读取所有行包括第一行作为业务数据
        Object[] tableLines = br.lines().toArray();
        
        for(int i = 0; i < tableLines.length; i++)
        {
            String line = tableLines[i].toString().trim();
            String[] dataRow = line.split(",");
            model.addRow(dataRow);
        }
        br.close();
    }
    catch(Exception ep){
        Logger.getLogger(people_info.class.getName()).log(Level.SEVERE, null, ep);
    }
}

补充优化建议:所有IO流操作建议使用try-with-resources语法自动关闭,避免手动关闭异常导致的资源泄漏

内容的提问来源于stack exchange,提问作者godopetza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:06:09