我有一个查询,在下面的代码我有一个文件名,如下所示
FileInputStream
稍后我将传递给FileInputStream fileStream = new FileInputStream(filename);
workbook = new HSSFWorkbook(fileStream);
对象,如下所示
FileInputStream
上面的快乐案例是文件名是硬编码的,它被传递给public void abcd( byte[] excelByteStream) {
//how to pass the the byte array file to the FileInputStream object
}
对象,但是如果有人以字节数组的形式给我文件然后如何处理这种情况,例如
如下图所示
FileInputStream
那么在这种情况下我们如何将字节流文件传递给memberAccessExpression
对象请告知
答案 0 :(得分:1)
你做不到。 FileInputStream
是一种InputStream
类型,需要将文件作为输入。
要使用字节数组,您可以使用java.io.ByteArrayInputStream
,这也是InputStream
的另一种类型。
确保将期望输入流的任何内容定义为接受更通用的InputStream
。 (例如:public HSSFWorkbook(InputStream inputStream) { // HSSFWorkbook constructor definition
)
编辑:更完整的示例
如果您的HSSFWorkbook
类的构造函数当前定义为:
public HSSFWorkbook(FileInputStream inputStream) {
// ...
}
...您希望将其更改为接受更通用的InputStream
类,现在允许您将FileInputStream
或ByteArrayInputStream
实例传递给它,具体取决于你叫它。像这样:
public HSSFWorkbook(InputStream inputStream) {
// ...
}
然后,您可以使用以下任一选项实例化HSSFWorkbook
:
FileInputStream fileStream = new FileInputStream(filename);
workbook = new HSSFWorkbook(fileStream); // still works
......或......
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(excelByteStream);
workbook = new HSSFWorkbook(byteArrayInputStream ); // now also works.
答案 1 :(得分:0)
使用ByteArrayInputStream代替FileInputStream:
workbook = new HSSFWorkbook(excelByteStream);