我正在用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
答案 0 :(得分:3)
显然它是由(String)(tableSalesFood.getValueAt(i,j)
引起的,你试图将Integer强制转换为字符串。请确保您知道ClassCastException
是什么,例如请参阅此question。
您可以通过转换修复错误,而不是强制转换:
Objects.toString(tableSalesFood.getValueAt(i,j), "");
类Objects
在java.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);
}