2017-10-15 235 views
-2

我想导出我的jTable到文本文件。这里是我的代码Jtable数据到txt

for (int i = 0; i < table.getRowCount(); i++) { 
      for (int y = 0; y < table.getColumnCount(); y++) { 

       if (table.getValueAt(i, y) != null) { 

         bw.write(table.getValueAt(i, y) + " "); 

       } 

      } 

      bw.newLine(); 
     } 

一切工作正常,所有单元格填充值。但是,当我只填满一半的细胞时,出口并不完美。最后一个值缺失。 例如:

[value1][value2][value3] 
    [value4][value5][value6] 
    [value7][value8][value9] 

打印所有值的文本文件。 但这:

[value1][value2][value3] 
    [value4][value5][value6] 
    [null][null][null] 

只打印值1,值2,值3,值4和值5。 问题在哪里?

+2

我已经低估了这个问题,因为没有对此代码执行任何调试的证据。请[编辑]您的问题,向我们展示您的调试未发现的内容,以及关于特定代码行的具体问题。请参阅:[如何创建最小,完整和可验证示例](http://stackoverflow.com/help/mcve)和[如何调试小程序](https://ericlippert.com/2014/03/05 /如何调试的小程序/)。 –

+1

[*无法获取正在编辑的单元格的当前值*](https://stackoverflow.com/q/20910983/230513)的可能重复。 – trashgod

+0

Trashgod-非常感谢你。有用。您可以将答案写为答案,以便我可以为您解答问题。 :) – jv95

回答

0

尝试以下操作:

public void writeTXT(JTable table) throws IOException, ClassNotFoundException, SQLException { 
    Writer writer = null; 
    try{ 
    writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("filename.txt"))); 
    StringBuffer bufferHeader = new StringBuffer(); 
    for(int i = 0; i<table.getColumnCount();i++){ 
     bufferHeader.append(table.getColumnName(i)); 
     if(i!=table.getColumnCount()) bufferHeader.append(" "); 
    } 
    writer.write(bufferHeader.toString()+"\r\n"); 

    for(int j = 0; j<table.getRowCount(); j++){ 
     StringBuffer buffer = new StringBuffer(); 
     for (int k = 0; k<table.getColumnCount(); k++){ 
     buffer.append(table.getValueAt(j,k)); 
     if(k!=table.getColumnCount()) buffer.append(" "); 
     } 
     writer.write(buffer.toString()+"\r\n"); 
    } 
    }finally{ 
    writer.close(); 
    } 
} 

不包括第一个for循环,如果您还没有列名/不需要它们。