2015-05-29 49 views
2

當我上傳文件時,我將輸入流傳遞給工作簿。現在我想用另一種方法從工作簿中使用此InputStream,例如將文件InputStream保存到數據庫中。這是我的代碼。如何從java中的Workbook對象獲取inputStream

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

現在我想使工作簿對象作爲實例變量並傳遞給另一個方法,如下所示。

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

在我SAVEFILE方法

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

所以inptest變量接受InputStream我想從工作簿得到它。

+0

什麼庫和包是'工作簿'? – markspace

+0

我使用poi-ooxml-3.9.jar。 – aradhya

+0

究竟是什麼問題? – RickyA

回答

3

這聽起來像你問的是使用的InputStream用於多種用途的方式來完成:

  1. 要創建一個工作簿對象(你」重已經這樣做)
  2. 要保存的InputStream其他

某處的內容,因爲從InputStream讀取通常是一次性的,只是不能repea操作泰德,那麼你就可以做到以下幾點:

  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。

+0

哇你的解決方案工作。非常感謝。 – aradhya

+0

很高興工作!如果一個解決方案爲你工作,這裏的常見禮儀是通過點擊複選標記來標記答案。看[這裏](http://stackoverflow.com/help/accepted-answer) – GreenGiant

1

如果您嘗試將Workbook對象保存到文件中,則有一個方法write(),它接受OutputStream。保存到一個文件可以通過

FileOutputStream fos = new FileOutputStream("path/to/file/[filename]"); 
workbook.write(fos); 
fos.close(); 
+0

沒有這不起作用 – aradhya

+0

它應該工作,但這取決於你正在嘗試做什麼。您可能還需要關閉FileOutputStream以使文件出現。上面編輯。 – csunday95

+0

我想你不清楚我的問題。我想從工作簿中讀取輸入流,因此可以根據我的代碼寫入工作簿,然後如何從中輸入輸入流。請讓我知道是否有這樣的方法。 – aradhya