将JTable内容保存为文本文件

时间:2016-11-02 13:39:53

标签: java swing user-interface netbeans jtable

我正在用Java订购家庭作业系统菜单。我将以程序的形式制作一张收据,创建一个包含表格内容的文本文件。但是我在这方面遇到了麻烦。我的所有表格内容都是字符串。

这是导出表格内容的代码:

try{       
   BufferedWriter bfw = new BufferedWriter(new FileWriter("Data.txt"));
   for(int i = 0 ; i < tableSalesFood.getColumnCount() ; i++){
       bfw.write(tableSalesFood.getColumnName(i));
       bfw.write("\t");
   }

   for (int i = 0 ; i < tableSalesFood.getRowCount(); i++){
       bfw.newLine();
       for(int j = 0 ; j < tableSalesFood.getColumnCount();j++){
          bfw.write((String)(tableSalesFood.getValueAt(i,j)));
          bfw.write("\t");;
       }
   }

   bfw.close();   
   }catch(Exception ex){
      ex.printStackTrace();
   }

单击按钮时程序返回异常错误:

java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

2 个答案:

答案 0 :(得分:3)

显然它是由(String)(tableSalesFood.getValueAt(i,j)引起的,你试图将Integer强制转换为字符串。请确保您知道ClassCastException是什么,例如请参阅此question

您可以通过转换修复错误,而不是强制转换:

Objects.toString(tableSalesFood.getValueAt(i,j), "");

Objectsjava.util包中定义。

答案 1 :(得分:1)

您可以使用JTable的默认TransferHandler实际创建制表符分隔值,以将JTable的标题和值导出为字符串:

Toolkit toolkit = Toolkit.getDefaultToolkit();
Clipboard clipboard = toolkit.getSystemClipboard();
table.getTransferHandler().exportToClipboard(table, clipboard,
    TransferHandler.COPY);

try {
    String text = (String) clipboard.getData(DataFlavor.stringFlavor);
    Files.write(Paths.get("Data.txt"), Collections.singleton(text),
        Charset.defaultCharset());
} catch (UnsupportedFlavorException | IOException e) {
    throw new RuntimeException(e);
}