【Java Swing】csvファイルをJTableに表示するプログラム

import java.io.BufferedReader;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Files;
import java.nio.file.Path;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.filechooser.FileFilter;
import javax.swing.filechooser.FileNameExtensionFilter;
import javax.swing.table.DefaultTableModel;
public class CsvView extends JFrame {
 private final static Charset SJIS = Charset.forName("sjis");
 private final JTable table = new JTable();
 private final JFileChooser filechooser = new JFileChooser();
 public CsvView(String title) {
  setTitle(title);
  setBounds(100, 100, 300, 250);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  filechooser.setDialogTitle("Csvファイルを開く");
  filechooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
  FileFilter filter = new FileNameExtensionFilter("CSVファイル", "csv");
  filechooser.addChoosableFileFilter(filter);
  JMenuItem menuitem1 = new JMenuItem("Csvファイルを開く");
  menuitem1.addActionListener(e -> loadCSV(true));
  JMenu menu1 = new JMenu("ファイル");
  menu1.add(menuitem1);
  JMenuBar menubar = new JMenuBar();
  menubar.add(menu1);
  setJMenuBar(menubar);
  table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
  JScrollPane sp = new JScrollPane(table);
  add(sp);
 }

 private void loadCSV(boolean hasColHeader) {
  int selected = filechooser.showOpenDialog(this);
  if (selected != JFileChooser.APPROVE_OPTION) {
   return;
  }
  Path path = filechooser.getSelectedFile().toPath();
  int option = JOptionPane.showConfirmDialog(this, "ヘッダー(1行目)にタイトルを含みますか?",
    "ヘッダーの有無指定", JOptionPane.YES_NO_OPTION, 
    JOptionPane.WARNING_MESSAGE);
  if (option == JOptionPane.YES_OPTION){
   hasColHeader=true;
  }else if (option == JOptionPane.NO_OPTION){
   hasColHeader=false;
  }
  
  try (BufferedReader reader = Files.newBufferedReader(path, SJIS)) {
   String line = reader.readLine();
   if (line == null || line.isEmpty()) {
    table.setModel(new DefaultTableModel());
    return;
   }
   String[] lineData = line.split(",", -1);
   DefaultTableModel model;
   if (hasColHeader) {
    model = new DefaultTableModel(lineData, 0);
   } else {
    model = new DefaultTableModel(0, lineData.length);
    model.addRow(lineData);
   }
   while ((line = reader.readLine()) != null) {
    model.addRow(line.split(",", -1));
   }
   table.setModel(model);
  } catch (IOException e) {
   JOptionPane.showMessageDialog(this, e);
  }
 }

 public static void main(String args[]) {
  SwingUtilities.invokeLater(() -> {
   CsvView frame = new CsvView("Csvファイル表示");
   frame.setVisible(true);
  });
 }
}