有沒有辦法獲得Apache的POI工作簿InputStream
?獲取InputStream forom Apache的POI工作簿
我需要它來管道到另一個OutputStream
,但我找不到這樣的方法(如果存在)。
如果沒有,還有其他方法獲取它的提示?
有沒有辦法獲得Apache的POI工作簿InputStream
?獲取InputStream forom Apache的POI工作簿
我需要它來管道到另一個OutputStream
,但我找不到這樣的方法(如果存在)。
如果沒有,還有其他方法獲取它的提示?
有多種方法可以解決這個問題:
PipetInputStream
和PipedOutputStream
。但您必須創建不同的線程才能使用PipedInputStream
(如http://docs.oracle.com/javase/7/docs/api/java/io/PipedInputStream.html中所述)ByteArrayOutputStream
,然後您可以使用結果字節數組通過ByteArrayInputStream
。這可以在一個線程中順序完成。是的,我雖然#2作爲替代,猜猜這就是它。 – Lopina
在這裏他們將全片以csv文件,使用的InputStream他們從XLSX文件了。
ReadOnlySharedStringsTable strings = new ReadOnlySharedStringsTable(this.xlsxPackage);
XSSFReader xssfReader = new XSSFReader(this.xlsxPackage);
StylesTable styles = xssfReader.getStylesTable();
XSSFReader.SheetIterator iter = (XSSFReader.SheetIterator) xssfReader.getSheetsData();
int index = 0;
while (iter.hasNext()) {
InputStream stream = iter.next();
String sheetName = iter.getSheetName();
this.output.println();
this.output.println(sheetName + " [index=" + index + "]:");
processSheet(styles, strings, new SheetToCSV(), stream);
stream.close();
++index;
}
這裏是如何執行#2亞歷山大·託卡列夫的回答(即從一個工作簿中獲得的InputStream):
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos);
byte[] barray = bos.toByteArray();
InputStream is = new ByteArrayInputStream(barray);
} catch (IOException e) {
e.printStackTrace();
}
可以擴展XSSFWorkbook,保存文件或InputStream對象的構造函數和他們得到它返回一些像getInputStream()方法
爲什麼不使用它的'write'方法? (http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Workbook.html#write(java.io.OutputStream)) –
我知道這種方法,但是,我有一些要求這樣我需要一個輸入流。 – Lopina
寫入'ByteArrayOutputStream',寫入完成後從中獲取字節數組,然後將其傳遞給'ByteArrayInputStream'? – Gagravarr