各位好:
    
      我现在遇到一个麻烦事,请大家帮忙我想一下哪里出问题了,就是我要导出excel表,首先先把数据库的数据写到excel表放到服务器上,然后再读取服务器的excel表到客户端,现在一个问题就是当把数据库写到excel文件到服务器产生一个excel的随机文件,然后再客户端读取服务器的excel文件时,在服务器里又出现一个不同文件名但内容相同的excel文件,不知道是什么回事,也就是说整个过程产生了两个文件,我只要产生一个文件供客户端读取就行了的。请大家帮忙哈,谢谢了。。
String filename=path+"/gasGas"+Util.genRandomNum(8)+"Info.xls";
OutputStream os = new FileOutputStream(filename);
WritableWorkbook wwb = Workbook.createWorkbook(os);
         Workbook ws = wwb.createSheet("Sheet1", 0);
    for (int i = 0; i < split.length; i++){    
             jxl.write.Label wlabel0;    
             wlabel0 = new jxl.write.Label(i, 0, split[i],wcf);    
             ws.addCell(wlabel0);    
       }  
wwb.write();
wwb.close();
os.close();
然后再读取服务器的excel又产生了一个随机文件在服务器
java.io.OutputStream o = response.getOutputStream();
File fileLoad=new File(filename);//这里的filename文件名就是上面要写到excel表的文件名
byte b[] = new byte[(int)fileLoad.length()];
response.reset();
           FileInputStream   fileInputStream   =   
      new   java.io.FileInputStream(filename);   
     int   i;   
    while   ((i=fileInputStream.read(b))   !=   -1)   {   
    o.write(b, 0, i);
    }   
   o.flush();
   o.close();   
}

解决方案 »

  1.   

    其实不用在服务端生成物理excel文件,你直接输出到客户端不就可以了么。也就是说OutputStream os = new FileOutputStream(filename);
    这个os不就是个输出流么。你直接指向ServletOutStream就应该可以了。
    对于lz出现的问题,我觉得可能是多次测试产生的文件吧(要在确认),lz也可以在下载完成后把文件删除试试
      

  2.   


    恩,谢谢哈。
    然后向补充下问题的描述哈,我现在就是发现如果客户端机器没有安装迅雷的话,直接用IE自带的下载,就不会产生第二个文件了,现在就是说当用户点击导出,IE弹出保存对话框,产生一个excel。我点击保存,然后就弹出迅雷的下载对话框,我点击下载按钮,又产生一个excel文件。。如果没有弹出迅雷下载,就不会产生第二个文件了。