Apache POI 통합 문서 InputStream
을 얻을 수있는 방법이 있습니까?Apache의 POI 통합 문서 InputStream 가져 오기
다른 OutputStream
으로 배관하는 데 필요하지만, 그러한 방법을 찾을 수 없습니다 (있는 경우).
그렇지 않은 경우 얻을 수있는 다른 방법에 대한 정보가 있습니까?
Apache POI 통합 문서 InputStream
을 얻을 수있는 방법이 있습니까?Apache의 POI 통합 문서 InputStream 가져 오기
다른 OutputStream
으로 배관하는 데 필요하지만, 그러한 방법을 찾을 수 없습니다 (있는 경우).
그렇지 않은 경우 얻을 수있는 다른 방법에 대한 정보가 있습니까?
이 문제를 해결하기 위해 여러 가지 방법이있다 :
PipetInputStream
및 PipedOutputStream
를 사용할 수 있습니다. 그러나 PipedInputStream
(http://docs.oracle.com/javase/7/docs/api/java/io/PipedInputStream.html에 설명 된대로)을 사용하는 다른 스레드를 만들어야합니다.ByteArrayOutputStream
에 쓸 수 있으며 ByteArrayInputStream
을 통해 결과 바이트 배열을 사용할 수 있습니다. 이 작업은 하나의 스레드에서 순차적으로 수행 할 수 있습니다.그래, 나는 # 2를 대안으로 생각하지만 그것이 될거야. – Lopina
를 확인하실 수 있습니다 그들은 XLSX 파일에서 가져온의 InputStream을 사용하여 csv 파일로 전체 시트를 변환한다.
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