在 Java Swing 开发中,使用 JTable 展示 CSV 文件数据时,常出现列被截断或行没有全部加载的情况。这通常是因为没有正确构建表格模型,或者在解析 CSV 时忽略了表头与数据行的对应关系。只要按标准流程读取并填充模型,就可以完整显示所有列与行。

读取 CSV 并构建表格模型
我们可以借助 BufferedReader 按行读取 CSV,用逗号分割后得到单元格内容。首行作为列名,其余行作为数据。下面给出一个简单的实现示例。
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Vector;
import javax.swing.table.DefaultTableModel;
public class CsvTableLoader {
public static DefaultTableModel loadCsv(String path) throws Exception {
BufferedReader br = new BufferedReader(new FileReader(path));
String line = br.readLine();
// 首行作为列名
Vector<String> columns = new Vector<>();
if (line != null) {
String[] heads = line.split(",");
for (String h : heads) {
columns.add(h.trim());
}
}
// 其余行作为数据
Vector<Vector<String>> rows = new Vector<>();
while ((line = br.readLine()) != null) {
String[] cells = line.split(",");
Vector<String> row = new Vector<>();
for (String c : cells) {
row.add(c.trim());
}
rows.add(row);
}
br.close();
return new DefaultTableModel(rows, columns);
}
}
将模型设置给 JTable
得到 DefaultTableModel 后,直接通过 setModel 方法赋值即可。JTable 会自动根据模型中的列数和行数绘制表格,不会遗漏内容。
import javax.swing.JTable;
JTable table = new JTable();
table.setModel(CsvTableLoader.loadCsv("data.csv"));
处理带引号的字段
如果 CSV 中某字段包含逗号且用双引号包裹,简单的 split 会拆错。此时应使用支持引号规则的解析方式,或引入第三方库如 OpenCSV,确保整列数据不被切断。
注意编码问题
文件若不是默认编码,可能读出行乱码而被误认为空行。建议在 FileReader 外包裹 InputStreamReader 并指定 UTF-8,保证所有行正常载入。
总结
正确显示 JTable 中 CSV 导入的全部列与行,核心在于用首行生成列、其余行生成数据,并交给 DefaultTableModel。避开分割与编码陷阱,表格就能完整呈现文件内容。
JTableCSV导入Java_Swing修改时间:2026-07-28 22:54:26