XSSFSheet无法强制转换为java.io.File

时间:2018-01-09 13:35:24

标签: java database apache-poi inputstream

我正在从特定的excel工作簿中读取一些值。我将这些值添加到我的数据库中。这个

没有任何问题

但我也想将工作簿的表存储到我的数据库BLOB单元格中。

我正在尝试将工作表转换为Byte []。我使用下面的代码。

我正在尝试将表格转换为java.io.File。但我得到以下异常

  

线程“AWT-EventQueue-0”中的异常java.lang.ClassCastException:   org.apache.poi.xssf.usermodel.XSSFSheet无法强制转换为java.io.File

public  byte[] convertPDFToByteArray() {

    InputStream inputStream = null;
    ByteArrayOutputStream baos = new ByteArrayOutputStream();

    File file = (File) oku.wb.getSheet("İN");

    try {

        inputStream = new FileInputStream(file);

        byte[] buffer = new byte[1024];
        baos = new ByteArrayOutputStream();

        int bytesRead;
        while ((bytesRead = inputStream.read(buffer)) != -1) {
            baos.write(buffer, 0, bytesRead);
        }

    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return baos.toByteArray();
    }

有没有办法将 “wb.getSheet(”İN“);” 强制转换为java.io.File或更好的方法?

1 个答案:

答案 0 :(得分:2)

你不能只在两个不相关的类之间进行投射。 在您的情况下,我认为您应该使用工作表的getBytes(),因为工作表对象没有这个:

byte[] buffer = sheet.getWorkbook().getBytes();

您的oku.wb似乎已包含工作簿,在这种情况下,您可以直接在getBytes()上致电oku.wb

byte[] buffer = oku.wb.getBytes();

编辑 Blast,我从我自己的一个项目中选择了此代码,但使用的是HSSFSheet而不是XSSFSheet。因此,您最好的方法是使用评论中概述的工作簿write()方法:

public byte[] convert(XSSFSheet sheet) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
        sheet.getWorkbook().write(baos);
    } catch (IOException e) {
        // blah
    }
    return baos.toByteArray();
}