java.io.fileinputstream cannot be cast to java.io.file

今天在实现大数据量导出多个Excel文件是碰到一个问题,在调用导出方法的时候报错:java.io.fileinputstream cannot be cast to java.io.file

经检查后发现,导出方法中传入的导出多个文件的List中添加的数据类型必须是File类型的,而自己向List中添加的是FileInputStream类型的,因此

报出以上错误。于是打算将FileInputStream类型强转为File类型,在网上查找资料后发现并不能直接将FileInputStream数据类型转化为File类型,

原因是FileInputStream类型的数据是一种数据流,而File类型的数据是一种文件。

最后为了解决问题,经过思考后,尝试将数据流先写出到本地生成具体的文件,再将文件读取出来,读取出来的文件就变为了File类型,问题得到解决。


代码片段如下:

// 获取导出数据集
List list = resEvent.getDataList();
// 转换名称
list = new CxdwcbygssbcymxVOListHandler("").handleList(list, 0, 0);
// 设置集合中对象的哪些属性需要批量导出
String[] propertyArray = { "nsrmc", "swdjzh", "xm","sfzjhm", "sre", "lrrq", "zgswjMc", "ssglyMc"};
//存放每个excle表File的list
List files = new ArrayList();
//存放每个excle表中数据的list
List temp = new ArrayList();
//创建excle输出临时目录
String path = request.getSession().getServletContext().getRealPath("/")+"fileTemp";
File file =new File(path);
if(!file.exists()){//如果不存在则创建
file.mkdirs();
}else{//如果存在则删除后创建
file.delete();
file.mkdirs();
}
int j = 1;
for(int i = 0; i<list.size();i++){
if(i==(j*65535)){//Excel2003版每个文档导出65535条数据
j++;
temp = new ArrayList();
temp.add(list.get(i));
}else{
temp.add(list.get(i));
}
if(i==list.size()-1 || temp.size()==65535){
// 实例化Excel导出模型
XlsExportModel xem = new XlsExportModel();
// 设置模板,其中模板需放在什么地方,请查看本工程sword.xml文件
xem.setTemplateFile("cycx07_cbrsygssbrsbjmd_mx.xls");
// 设置装着数据的集合
xem.setDataList(temp);
xem.setPropertyArray(propertyArray);
// 设置批量数据的起始行和起始列
xem.setDataStartRow(1);
xem.setDataStartCol(0);
// 设置集合中的对象类型
xem.setClazz(CxdwcbygssbcymxVO.class);

FileInputStream fileIn = XlsFileParser.appendTemplateXls(xem);
//定义写出excle的文件名
String fileName ="单位参保与个税申报差异明细--"+j+".xls";
//文件的完整目录
String realpath = path+"/"+fileName;
//excle写出到临时目录
FileOutputStream fileOut = new FileOutputStream(realpath);
int read;  
byte b[]=new byte[1024];  
        //读取文件,存入字节数组b,返回读取到的字符数,存入read,默认每次将b数组装满  
        read=fileIn.read(b);  
        while(read!=-1){  
                fileOut.write(b,0,read);  
          read=fileIn.read(b);   
       }  
       File readfile = new File(realpath);
       files.add(readfile);
         fileIn.close();  
         fileOut.close();
}


}


FileExport fileExport = new FileExport(
URLEncoder.encode("单位参保与个税申报差异明细", "UTF-8"),
FileConstants.FILE_EXT_NAME_ZIP);
try {
fileExport.exportFile(response, files);
} catch (IOException e) {
logger.error("文件导出时发生异常,文件导出失败");
throw new CSSBaseCheckedException(30201208);
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值