java.io.fileinputstream cannot be cast to java.io.file
来源:互联网 发布:半周积分算法的优缺点 编辑:程序博客网 时间:2024/05/29 04:34
今天在实现大数据量导出多个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);
}
- java.io.fileinputstream cannot be cast to java.io.file
- 文件下载之java.io.FileInputStream cannot be cast to java.lang.String
- cannot be cast to java.io.Serializable
- struts2下载文件时出现:java.lang.ClassCastException: java.io.ByteArrayInputStream cannot be cast to 错误
- struts2下载文件时出现:java.lang.ClassCastException: java.io.ByteArrayInputStream cannot be cast to 错误
- struts2 下载问题java.lang.ClassCastException: java.io.ByteArrayInputStream cannot be cast to
- Java中解决 cannot be cast to java.io.Serializable的问题
- nested exception is java.lang.ClassCastException:XXX cannot be cast to java.io.Serializable
- com.test.mysql.entities.Clazz cannot be cast to java.io.Serializable
- java.lang.ClassCastException: io.dcloud.HBuilder.xinhuaexpress.XHSApplication cannot be cast to and
- struts2下载文件时出错提示:java.lang.ClassCastException: java.io.ByteArrayInputStream cannot be cast to java.l
- java.util.LinkedHashMap cannot be cast to
- java.io.IOException cannot be resolved to a type
- 【java学习】IO FileInputstream
- Java IO - FileInputStream&FileOutputStream
- java io -- FileInputStream
- The import java.io cannot be resolved
- java.IO系统file类中createNewFile FileInputStream的思考
- SAE平台文件I/O操作 心得与体会
- Java网络编程
- MyEclipse10安装SVN插件
- Swift类型定义
- 常用计算机视觉实验图像库和图像集
- java.io.fileinputstream cannot be cast to java.io.file
- 动态取得R.id.XX
- Spring AOP 的两种配置方式
- 大一总结
- // 选择排序 *源码
- 如何使用SVN
- 个人常用iOS第三方库以及XCode插件介绍
- C++设计模式-Command命令模式
- 逆向迭代器reverse_iterator