Java Excel追加更新因Apache POI而失败

Java Excel追加更新因Apache POI而失败,java,excel,apache-poi,Java,Excel,Apache Poi,我从URL获取数据,并尝试使用以下代码将行附加到现有excel文件中 if (file.exists()) { in=new FileInputStream(new File(path)); workbook = new HSSFWorkbook(in); sheet = workbook.getSheetAt(0); in.close();

我从URL获取数据,并尝试使用以下代码将行附加到现有excel文件中

  if (file.exists()) {
                in=new FileInputStream(new File(path));

                workbook = new HSSFWorkbook(in);
                sheet = workbook.getSheetAt(0);
                in.close();
            } else {
                workbook = new HSSFWorkbook();
                sheet = workbook.createSheet();
                row = sheet.createRow(0);
                row.createCell(0).setCellValue("keyTerm");
                row.createCell(1).setCellValue("username");
                row.createCell(2).setCellValue("Text");
                row.createCell(3).setCellValue("Timestamp");
            }
然后

int count = sheet.getLastRowNum();    
for (int i = 0; i < tweets.length(); i++) {
                        tweet = tweets.getJSONObject(i);
                        count++;
                        row = sheet.createRow(count);
                        row.createCell(0).setCellValue(term);
                        row.createCell(1)
                                .setCellValue(tweet.getString("from_user"));
                        row.createCell(2).setCellValue(
                                tweets.getJSONObject(i).getString("text"));
                        row.createCell(3).setCellValue(
                                tweet.getString("created_at"));
    }

write
方法不仅写入您在电子表格中添加的新内容。它将整个工作簿写入输出流。因此,如果您试图将整个新工作簿附加到旧工作簿中,我可以看出它不会按照您的想法执行

在将工作簿写入文件时,我从未附加到现有文件。您应该始终以(默认)覆盖模式打开流,这样整个工作簿(除了整个工作簿)都会转到流和目标文件

out = new FileOutputStream(file);  // or new FileOutputStream(file, false);

当前代码仅在文件不存在时有效,因为没有可附加的内容。总之,不要附加;覆盖(或写入其他文件)。

写入方法不会只写入您在电子表格中添加的新内容。它将整个工作簿写入输出流。因此,如果您试图将整个新工作簿附加到旧工作簿中,我可以看出它不会按照您的想法执行

在将工作簿写入文件时,我从未附加到现有文件。您应该始终以(默认)覆盖模式打开流,这样整个工作簿(除了整个工作簿)都会转到流和目标文件

out = new FileOutputStream(file);  // or new FileOutputStream(file, false);

当前代码仅在文件不存在时有效,因为没有可附加的内容。总之,不要附加;覆盖(或写入其他文件)。

谢谢。但是,从长远来看,这不是很昂贵吗?比如说,我有3万条记录,而且几乎没有添加10-12条记录,但这是没有帮助的。
write
方法是输出电子表格的唯一方法,它可以写入所有内容。谢谢。但是,从长远来看,这不是很昂贵吗?比如说,我有3万条记录,而且几乎没有添加10-12条记录,但这是没有帮助的。
write
方法是输出电子表格的唯一方法,它可以写入所有内容。