我有一个看起来像这样的文本文件

---
*Jack
*James
Tim
*Hannah
Kim


我希望程序读取文件的每一行并获取不带*的名称,并将其显示在JTable中。我想出了以下代码,但它仅在表中显示姓氏“ Kim”。这是问题所在的代码的一部分。

public class GUI extends JPanel{
public JFileChooser fileChooser;
public JButton openbtn;
public BufferedReader br;
public File file;

public GUI(){

    fileChooser = new JFileChooser();
    fileChooser.setCurrentDirectory(new File(System.getProperty("user.home")));
    fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY);
    if (fileChooser.showOpenDialog(openbtn)==JFileChooser.APPROVE_OPTION){
    String fName = null;

    file = fileChooser.getSelectedFile();
   try{
       br = new BufferedReader(new FileReader(file));
       String nextLine;
       while ((nextLine = br.readLine()) != null)
       {
           if (nextLine.startsWith("---"))
           {
               String[] f = nextLine.split("*");
               fName = f[1];
                   }
       }

      String[] columns = {"FirstName"};
      Object[][] data = {{fName}};
      JTable tableVIEW = new JTable(data, columns);
      tableVIEW.setPreferredScrollableViewportSize(new Dimension(250, 35));
      tableVIEW.setFillsViewportHeight(true);
        br.close();
        }
        catch (IOException e) {
            System.out.println("Error - INVALID FILE. PLEASE TRY AGAIN");
        }
        }
    }
  }


因此,我尝试将fName放入数组并使用计数器,但是浏览文件时出现此错误

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException


和代码:

    if (fileChooser.showOpenDialog(openbtn)==JFileChooser.APPROVE_OPTION){
    String[] fName = null;
    int counter = 0;

    file = fileChooser.getSelectedFile();
   try{
       br = new BufferedReader(new FileReader(file));
       String nextLine;
       while ((nextLine = br.readLine()) != null)
       {
           if (nextLine.startsWith("---"))
           {
               String[] f = nextLine.split("*");
               fName[counter] = f[1];
               counter++;
                   }
       }


如何获取表中的所有条目(不仅仅是最后一个条目)?

最佳答案

它仅在Jtable中显示姓氏“ Kim”


Object[][] data = {{fName}};


您只需向数据数组添加一条信息。

相反,您需要为TableModel添加每个唯一的数据。因此,首先使用以下代码创建DefaultTableModel(从文件中读取数据之前):

String[] columns = {"FirstName"};
DefaultTableModel model = new DefaultTableModel(columns, 0);


然后在循环中,只要您从文件中读取数据,就将数据添加到模型中:

Vector row = new Vector(1);
row.add( f[1] );
model.addRow( row );


然后,在循环完成之后,创建表:

JTable tableVIEW = new JTable(model);

10-04 23:15
查看更多