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); }); } }