Файл поврежден при записи в Java с использованием Apache POI 3.17 - PullRequest
0 голосов
/ 04 июня 2018
public class ClassA1 {
   private static Workbook wb;
   private static FileOutputStream fos;
   private static FileInputStream fis;
   private static org.apache.poi.ss.usermodel.Sheet sh;
   private static Row row;
   private static Cell cell;

public static void main(String[] args) throws Exception {

    fis = new FileInputStream("./javabook.xlsx");
    wb = WorkbookFactory.create(fis);
    sh = wb.getSheet("Sheet1");
    row =sh.getRow(1);
    cell = row.createCell(0);
    cell.setCellValue("ibrahim1");

    fos = new FileOutputStream("./javabook.xlsx");
    wb.write(fos);
    fos.close();
    System.out.println("Done");


   }
}

Это сработало в первый раз, и в ячейке появился текст "ibrahim01". Однако, когда я запустил его во второй раз, я получил эту ошибку: -

 Exception in thread "main" org.apache.poi.EmptyFileException: The supplied file was empty (zero bytes long)

at org.apache.poi.util.IOUtils.peekFirstNBytes(IOUtils.java:74)
at org.apache.poi.util.IOUtils.peekFirst8Bytes(IOUtils.java:57)
at org.apache.poi.poifs.filesystem.FileMagic.valueOf(FileMagic.java:135)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:177)
at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:149)
at package1.ClassA1.main(ClassA1.java:25)

изображение ошибки, когдая открываю файл (javabook.xlsx) введите описание изображения здесь

1 Ответ

0 голосов
/ 05 июня 2018

Попробуйте это

import java.io.FileOutputStream;

import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ClassA1 {
    private static XSSFWorkbook wb;
    private static FileOutputStream fos;
    private static XSSFSheet sh;
    private static Row row;
    private static Cell cell;

    public static void main(String[] args) throws Exception {

        wb = new XSSFWorkbook();
        sh = wb.createSheet("Sheet1");
        row = sh.createRow(0);
        cell = row.createCell(0);
        cell.setCellValue("ibrahim1");

        fos = new FileOutputStream("./javabook.xlsx");
        wb.write(fos);
        fos.close();
        System.out.println("Done");

    }
}
...