如何从 java 中的 Workbook 对象获取 inputStream

how to get the inputStream from Workbook object in java

当我上传文件时,我将输入流传递到工作簿。现在我想在另一种方法中使用工作簿中的这个 InputStream,比如保存我将文件 InputStream 保存到数据库的地方。这是我的代码。

public void FileUpload(FileUploadEvent event) throws ParseException  {
    UploadedFile item = event.getUploadedFile();
    Workbook workbook = org.apache.poi.ss.usermodel.WorkbookFactory.create(item.getInputStream());
}

现在我想将 Workbook 对象作为实例变量并传递给另一个方法,如下所示。

public String save() throws SQLException, IOException{
    fileId = dao.savefile(workbook,fileName);
}

在我的存档方法中

InputStream inptest=  **workbook.getStream**
    ps.setBinaryStream(2,fin,fin.available()); 

所以 inptest 变量接受 InputStream 我想从工作簿中获取它。

如果您尝试将 Workbook 对象保存到文件中,可以使用一种方法 write(),它接受 OutputStream。然后可以通过

完成保存到文件
FileOutputStream fos = new FileOutputStream("path/to/file/[filename]");
workbook.write(fos);
fos.close();

听起来您要求的是一种将 InputStream 用于多种用途的方法:

  1. 创建工作簿对象(您已经在做)
  2. 将该 InputStream 的内容保存到其他地方

由于从InputStream中读取通常是一次性的操作,不能重复,那么你可以这样做:

  1. 将 InputStream 的全部内容保存到缓冲区。
  2. 从缓冲区中打开两个新的 InputStreams。
  3. 将您的 InputStreams 传递给您的两个方法。

代码可能如下所示:

public void FileUpload(FileUploadEvent event) throws ParseException  {
    UploadedFile item = event.getUploadedFile();
    InputStream originalInputStream = item.getInputStream();

    byte[] buffer = IOUtils.toByteArray(originalInputStream);
    InputStream is1 = new ByteArrayInputStream(buffer);
    InputStream is2 = new ByteArrayInputStream(buffer);

    Workbook workbook = org.apache.poi.ss.usermodel.WorkbookFactory.create(is1);
}

InputStream inptest = is2;
ps.setBinaryStream(2,fin,fin.available()); 

注意:这使用 Apache Commons IO library 作为 IOUtils。