并不是每一场导出excel都报错,只是偶尔。然后导出的excel表无法打开,也无法修复。
/**生成报表*/
String filename = "报表"+TimeUtil.getCurrentTime()+".xls";
try {
filename = new String(filename.getBytes("GBK"), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
logger.error("下载报表无效字符集");
}
response.addHeader("Content-Disposition", "attachment;filename="+filename);
response.setContentType("application/octet-stream");
OutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
wb.write(outputStream);//------报错行--
outputStream.flush();
outputStream.close();
} catch (IOException e) {
logger.error("下载报表异常:",e);
}finally{
try {
if(outputStream!=null){
outputStream.close();
}
} catch (IOException e) {
logger.error("下载报表流关闭异常");
}
}
下面是报错信息:
java.net.SocketException: Socket closed
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:99)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at weblogic.servlet.internal.ChunkOutput.writeChunkTransfer(ChunkOutput.java:568)
at weblogic.servlet.internal.ChunkOutput.writeChunks(ChunkOutput.java:539)
at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:427)
at weblogic.servlet.internal.CharsetChunkOutput.flush(CharsetChunkOutput.java:298)
at weblogic.servlet.internal.ChunkOutput$2.checkForFlush(ChunkOutput.java:648)
at weblogic.servlet.internal.CharsetChunkOutput.write(CharsetChunkOutput.java:200)
at weblogic.servlet.internal.ChunkOutputWrapper.write(ChunkOutputWrapper.java:148)
at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:148)
at java.io.OutputStream.write(OutputStream.java:58)
at org.apache.poi.poifs.storage.BigBlock.doWriteData(BigBlock.java:67)
at org.apache.poi.poifs.storage.DocumentBlock.writeData(DocumentBlock.java:195)
at org.apache.poi.poifs.storage.BigBlock.writeBlocks(BigBlock.java:98)
at org.apache.poi.poifs.storage.DocumentBlock.writeBlocks(DocumentBlock.java:34)
at org.apache.poi.poifs.filesystem.POIFSDocument$BigBlockStore.writeBlocks(POIFSDocument.java:547)
at org.apache.poi.poifs.filesystem.POIFSDocument.writeBlocks(POIFSDocument.java:303)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.writeFilesystem(POIFSFileSystem.java:385)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1232)
其实就是网速太慢,response的时候,自动关闭了。
参考:http://blog.csdn.net/cyp331203/article/details/44814245
看不懂
@luoshifu: 该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。
转自:http://developer.51cto.com/art/201003/189724.htm
@金琥: 唉,其实我知道是socket关闭的问题,但是就是不知道哪里什么时候关闭的?分析了代码,并没有发现什么,而且在生产上使用一直没有问题,恩,大概是两三个月出一次这样的问题,偶然性的,出现问题,重新下载又没事了
你好,请问解决了吗?我目前也遇到这个问题。想请教一下