如何从.csv文件向JTable中的列添加标头

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从.csv文件向JTable中的列添加标头相关的知识,希望对你有一定的参考价值。

我想在.csv文件中添加JTable列中的标头。

你可以在图片上看到我的.csv文件。

CSV file

我需要删除这段代码:private String[] columnNames = { "Country", "Capital", "Population" };而不是它放置另一个函数,可用于从.csv文件中的列名获取列的名称。

我的主要课程:

public class App extends JFrame {
private Object[][] data;
private String[] columnNames = { "Country", "Capital", "Population" };
private DefaultTableModel tableModel;
private JTable table;
private CountryList myList;

public App(String title) {
    super(title);
    setBounds(10, 10, 400, 300);
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    myList = new CountryList();
    myList.readFromCSV("data/country.csv");
    data = myList.convert2Data();
    tableModel = new DefaultTableModel(data, columnNames);
    table = new JTable(tableModel);
    table.setAutoCreateRowSorter(true);
    JScrollPane scrollPane = new JScrollPane(table);
    scrollPane.setPreferredSize(new Dimension(380, 280));
    JPanel panel = new JPanel();
    panel.add(scrollPane);
    add(panel, BorderLayout.CENTER);
}

public static void main(String[] args) {
    App myApp = new App("Basic JTable");
    myApp.setVisible(true);
}
}

我的班级CountryList:

public class CountryList {
private ArrayList<Country> books;

public CountryList() {
  books = new ArrayList<Country>();
}

public void add(Country sb) {
    books.add(sb);
}

public void readFromCSV(String filename) {
    File file = new File(filename);
    FileReader reader = null;
    try {
        reader = new FileReader(file);
    } catch (FileNotFoundException e) {
        e.printStackTrace();
        System.exit(1);
    }
    BufferedReader infile = new BufferedReader(reader);
    String line = "";
    try {
        boolean done = false;
        while (!done) {
            line = infile.readLine();
            if (line == null) {
                done = true;
            } else {
                String[] tokens = line.trim().split(";");
                String country = tokens[0].trim();
                String capital = tokens[1].trim();
                int population = Integer.parseInt(tokens[2].trim());
                Country sb = new Country(country, capital, population);
                books.add(sb);
            }
        }
    } catch (IOException e) {
        e.printStackTrace();
        System.exit(1);
    }
}
答案

您可以读取csv文件并将第一行添加到JTable标头。将以下方法添加到CountryList类:

public String[] getColumnNames(String csvFileDestination){
    BufferedReader br = null;
    String line = "";
    String[] columnNames;

    try {

        br = new BufferedReader(new FileReader(csvFileDestination));
        while ((line = br.readLine()) != null) {

            // use comma as separator
            columnNames = line.split(",");
            break;// Breaking out because you only need the first row

        }
        return columnNames;

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
           try {
               br.close();
            } catch (IOException e) {
               e.printStackTrace();
           }
        }
    }
    return null;
}

并用String[] columnNames = { "Country", "Capital", "Population" };替换私人private String[] columnNames;,并在构造函数中添加:columnNames = myList.getColumnNames("/path/to/csv/file.csv");

以上是关于如何从.csv文件向JTable中的列添加标头的主要内容,如果未能解决你的问题,请参考以下文章

使用 powershell 向现有 CSV 文件添加标头

如何从python中的CSV文件中的列中选择一个随机值?

如何通过SQL将一列JCheckBox添加到JTable? [重复]

以正确的顺序向 JTable 添加行。

如何将数据从 python 列表中的列和行写入 csv 文件?

spring batch csv:向csv添加多个标题