使用apache poi在Android中覆盖后,Excel文件被破坏

时间:2017-02-07 04:34:31

标签: java android excel apache-poi

我想覆盖excel文件,但覆盖的文件已损坏。我正在使用android studio,我想将信息保存到单个excel文件中。以下是我的代码:

private void saveIntoExcel(String fileName, String[] data) {
    try {
        String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + getString(R.string.app_name) + "/" + fileName;

        InputStream inp = new FileInputStream(new File(path));

        HSSFWorkbook workbook = new HSSFWorkbook(inp);
        HSSFSheet sheet = workbook.getSheetAt(0);
        HSSFRow row;

        row = sheet.createRow(sheet.getLastRowNum() + 1);
        for (int i = 0; i < data.length; i++) {
            HSSFCell cell = row.createCell(i);
            cell.setCellValue(data[i]);
        }

        FileOutputStream fos = null;
        File file;

        file = new File(path);
        fos = new FileOutputStream(file);

        workbook.write(fos);
        fos.close();        

        showToast(str_success);
    } catch (Exception e) {
        showToast(e.getMessage());
    }
}

我在pc上用excel文件测试了这段代码并且工作得很好,但是在android中文件被破坏了。

1 个答案:

答案 0 :(得分:1)

Apache POI并不像您尝试的那样完全支持更改文件的就地写入。

有关通过新的write()方法提供此问题的讨论,但是目前您需要写入不同的文件以避免在关闭对象期间破坏内容。关闭工作簿后,如有必要,可以将新文件移到旧文件上。

请参阅some related discussionthis bug