如何从TextFile获取文本并将其放入表

时间:2017-12-14 14:32:37

标签: java swing jtable bufferedreader filewriter

我正在尝试将文本从文本文件放到表格中,我希望它在按下按钮时显示在表格上。它不会显示任何错误,它只是不起作用。有人可以解释为什么以及如何使其工作。案文分为;

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

2 个答案:

答案 0 :(得分:0)

您计算文件中的行数

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();将返回null,因为已达到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]);

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

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

答案 1 :(得分:0)

你应该缩短它。

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次但未重置流。为什么?

然后你计算了行数并将这个数字作为列数,为什么?