如何从java

时间:2015-05-29 20:30:39

标签: java excel apache-poi

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

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);
}

在我的savefile方法

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

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

2 个答案:

答案 0 :(得分:4)

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

  1. 创建工作簿对象(您已经在做)
  2. 将InputStream的内容保存在其他地方
  3. 由于从InputStream读取通常是一次性操作,无法重复,因此您可以执行以下操作:

    1. 将InputStream的完整内容保存到缓冲区。
    2. 从缓冲区打开两个新的InputStream。
    3. 将您的InputStream传递给您的两种方法。
    4. 代码可能如下所示:

      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()); 
      

      注意:这对IOUtils使用Apache Commons IO library

答案 1 :(得分:1)

如果您尝试将Workbook对象保存到文件,则有一个方法write()接收OutputStream。然后可以通过

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