java excel导出到用户本地
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java excel导出到用户本地相关的知识,希望对你有一定的参考价值。
javaweb中,做的导出数据功能,数据导出的excel跑到服务器上了, 没导到用户本机上,求高手解答,另外求教怎么做导出时选择导出路径的方法
一般来说做下载功能的确是先导到服务器的一个临时目录上的,然后再用一段代码把这个excel读出来,并且输出到response流里面去,给你一段可以用的代码
//------------------------------//step1. 保存一个临时excel到temp目录下
//------------------------------
//这部分自己实现,我相信你已经实现了
//假设你已经实现了保存一个excel到一个临时文件夹里面去
//并且已经生成了一个File 指向这个临时的 excel,名叫exportFile
//-------------------------------
//step2. 弹出下载对话框
//-------------------------------
if(exportFile == null)
logger.error("生成excel错误! exportFile 为空");
return;
//先建立一个文件读取流去读取这个临时excel文件
FileInputStream fs = null;
try
fs = new FileInputStream(exportFile);
catch (FileNotFoundException e)
logger.error("生成excel错误! " + exportFile + " 不存在!",e);
return;
// 设置响应头和保存文件名
HttpServletResponse response = ServletActionContext.getResponse();
//这个一定要设定,告诉浏览器这次请求是一个下载的数据流
response.setContentType("APPLICATION/OCTET-STREAM");
try
//这边的 "采购部门本月采购报表.xls" 替换成你自己要显示给用户的文件名
excelName = URLEncoder.encode("采购部门本月采购报表.xls", "UTF-8");
catch (UnsupportedEncodingException e1)
logger.error("转换excel名称编码错误!",e1);
response.setHeader("Content-Disposition", "attachment; filename=\\"" + excelName + "\\"");
// 写出流信息
int b = 0;
try
//这里的 response 就是你 servlet 的那个传参进来的 response
PrintWriter out = response.getWriter();
while ((b = fs.read()) != -1)
out.write(b);
fs.close();
out.close();
logger.debug(sheetName + " 文件下载完毕.");
catch (Exception e)
logger.error(sheetName + " 下载文件失败!.",e);
把这段代码放到你的servlet的最后一部分
追问ServletActionContext这个方法是struts的?我用wicket做的,这个方法不能找到,是什么意思
参考技术A 要导出到用户的电脑上就不叫导出了,叫做下载。路径问题也是选择下载路径就可以了。。和迅雷类似。用IO流直接将你要下载的数据写入到本地就可以了 参考技术B 就是在jsp中用file标签就可以选择路径啦。然后你导出的时候你现在可能默认是在server的某个目录,你写成你页面选择的路径即可 参考技术C public void downLoadFile(String filePth)HttpServletResponse response = ServletActionContext.getResponse();
HttpServletRequest request = ServletActionContext.getRequest();
try
//得到当前路径
//String filePath=request.getSession().getServletContext().getRealPath(File.separator);
File temFile = new File(filePth);
if(!temFile.exists())
response.getWriter().write("ERROR:File Not Found");
return ;
String fileName = filePth.substring(filePth.lastIndexOf(File.separator)+1);
String browser = request.getHeader("user-agent");
Pattern p = Pattern.compile(".*MSIE.*?;.*");
Matcher m = p.matcher(browser);
if(m.matches())
response.setHeader("Content-Disposition", "attachment; filename=" +URLEncoder.encode(fileName, "UTF-8").replace("+",""));
else
response.setHeader("Content-Disposition", "attachment; filename=" +new String(fileName.getBytes("UTF-8"),"ISO8859-1").replace(" ", ""));
response.setContentType("application/x-download");
OutputStream ot=response.getOutputStream();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(temFile));
BufferedOutputStream bos = new BufferedOutputStream(ot);
byte[] buffer = new byte[4096];
int length = 0;
while((length = bis.read(buffer)) > 0)
bos.write(buffer,0,length);
bos.close();
bis.close();
ot.close();
catch (Exception e)
e.printStackTrace();
运行效果!不懂再问!
追问我使用这个 HttpServletResponse response = ServletActionContext.getResponse();ServletActionContext这个方法是不是struts中的,但是我没用struts开发
Java poi导出Excel,小数点后面数据缺失
我导出的数据是BigDecimal类型的,例如我跟踪看到的是87569345.94但是我导出的Excel显示为87569345.9,在线等啊,各位大神帮忙给解决下啊
数据缺失可能是精度问题。没看到具体代码 也不知道。你可以试试 BigDecimal b = new BigDecimal(0).setScale(5),精度可以设大一点,就可以看看。如果不是精度的问题,那具体我就想不到了。POI解析EXCEL 最多的问题就是数据类型的问题。 参考技术A 打印出来是正确的,但是在Excel中显示是错误的,如果Excel中不是必须是数字类型的话可以考虑将其转换成String类型展示以上是关于java excel导出到用户本地的主要内容,如果未能解决你的问题,请参考以下文章
Java POI怎样判断导出的Excel数据是不是正确地保存到本地。考虑网络中断,客户不正确操作等因素。