如何从文本文件中获取文本并将其放入 Table

How to get text from a TextFile and putting it to a Table

我正在尝试将文本从文本文件放入 table 我希望它在按下按钮时显示在 table 上。它不显示任何错误,它只是不起作用。有人可以解释为什么以及如何让它发挥作用。正文用 ; 分隔

       private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) 
        {                                         
        try {
        BufferedReader br = new BufferedReader(new 
         FileReader("zam.txt"));
        String r;
        int v =0;

        do{
            r = br.readLine();
            if(r!=null){
                 v++;
            }
        }while(r!=null);

        Object[] row = new String[v];

        do{
            r = br.readLine();
            if(r!=null){
                for (int i = 0; i < v; i++) {

                    int ix = r.indexOf(";");
                    row[i] = r.substring(0, ix);
                    r = r.substring(ix+1);

                    int zn = r.indexOf(";");
                    row[i] += r.substring(0, zn);
                    r = r.substring(zn+1);

                    int xn = r.indexOf(";");
                    row[i] += r.substring(0, xn);
                    r = r.substring(xn+1);

                    int an = r.indexOf(";");
                    row[i] += r.substring(0, an);

                    table.addRow(row);
                }
            }
        }while(r!=null);

        br.close();
    } catch (IOException e) {
    }
} 

你数一数文件中的行数

do{
    r = br.readLine();
    if(r!=null){
        v++;
    }
}while(r!=null);

之后你尝试从文件中读取,在已经达到 EOF 之后

do{
    r = br.readLine();
    if(r!=null){
        [...]
    }
}while(r!=null);

r = br.readLine();会returnnull,因为已经到了EOF,跳过循环


要解决此问题,您可以重新打开文件

//counting code
br.close();
br = new BufferedReader([...]);
//reading code

或者您可以将这些行添加到 List,然后使用

BufferedReader br = new BufferedReader([...]);
List<String> lines = new ArrayList<String>();
for(String line = br.readLine(); line != null; line = br.readLine())
    lines.add(line);
String[] row = lines.toArray(new String[0]);

如果您只是将值添加到 table,则根本不存储文件可能更容易

BufferedReader br = new BufferedReader([...]);
for(String line = br.readLine(); line != null; line = br.readLine())
    table.addRow(line.split(";"));

你应该缩短它。

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) 
{                                         
    try {
    BufferedReader br = new BufferedReader(new 
     FileReader("zam.txt"));

    String r;
    do{
        r = br.readLine();
        if(r!=null){
            String [] sline=r.split(";");
            table.addRow(sline);                
        }
    }while(r!=null);

    br.close();
    } catch (IOException e) {
    }
} 

原因:您读取文件2次但没有重置流。为什么?

然后你统计行数,把这个数当成列数,为什么?