下面的代码是从数据库中取数据生成N个EXCEL文件,然后吧excel文件打包成rar压缩文件,供用户下载。
在服务器上就会存在N个excel文件和一个压缩文件,想把他们统统删除,现在的程序可以删除部分,
excel文件会剩下一个或者两个无法删除,在window下手动删除提示文件被使用,
如何彻底地删除这些文件???
................
if(type.equals("excel"))
{
BinaryView docBinaryView =(BinaryView)boReport.getView(OutputFormatType.XLS);
byte[] abyBinaryContent = docBinaryView.getContent();
outputStream= new FileOutputStream(path+timePath+random+"\\"+webiDocName+".xls");
outputStream.write(abyBinaryContent);
}
outputStream.flush();
outputStream.close();
createZip(path+timePath+random,path+timePath+random+".zip");
File zipFile=new File(path+timePath+random+".zip");
delFolder(path+timePath+random);
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment;filename=\"" + timePath+random+".zip" + "\"");
/** 返回文件内容 */
int BUFSIZE = 1024 * 8;
int rtnPos = 0;
byte[] buffs = new byte[ BUFSIZE ];
FileInputStream inStream =new FileInputStream(path+timePath+random+".zip");
while((rtnPos=inStream.read(buffs)) >0)
response.getOutputStream().write(buffs,0,rtnPos);
response.getOutputStream().flush();
response.getOutputStream().close();
zipFile.delete();
%>
在服务器上就会存在N个excel文件和一个压缩文件,想把他们统统删除,现在的程序可以删除部分,
excel文件会剩下一个或者两个无法删除,在window下手动删除提示文件被使用,
如何彻底地删除这些文件???
................
if(type.equals("excel"))
{
BinaryView docBinaryView =(BinaryView)boReport.getView(OutputFormatType.XLS);
byte[] abyBinaryContent = docBinaryView.getContent();
outputStream= new FileOutputStream(path+timePath+random+"\\"+webiDocName+".xls");
outputStream.write(abyBinaryContent);
}
outputStream.flush();
outputStream.close();
createZip(path+timePath+random,path+timePath+random+".zip");
File zipFile=new File(path+timePath+random+".zip");
delFolder(path+timePath+random);
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment;filename=\"" + timePath+random+".zip" + "\"");
/** 返回文件内容 */
int BUFSIZE = 1024 * 8;
int rtnPos = 0;
byte[] buffs = new byte[ BUFSIZE ];
FileInputStream inStream =new FileInputStream(path+timePath+random+".zip");
while((rtnPos=inStream.read(buffs)) >0)
response.getOutputStream().write(buffs,0,rtnPos);
response.getOutputStream().flush();
response.getOutputStream().close();
zipFile.delete();
%>
File zipFile=new File(path+timePath+random+".zip");一个压缩文件就有一个excel文件 而且你生成的excel文件根本没有删除操作 ,应该在createZip
方法里 打包完成后 删除此excel文件
{
try {
File file = new File(folderPath);
if (!file.isDirectory())
{
file.delete();
}
else if (file.isDirectory())
{
String[] filelist = file.list();
for(int i=0;i<filelist.length;i++)
{
File delfile=new File(folderPath+"\\"+filelist[i]);
if(!delfile.isDirectory())
delfile.delete();
else if(delfile.isDirectory())
delFolder(folderPath+"\\"+filelist[i]);
}
file.delete();
}
}
catch (Exception e)
{
System.out.println("删除文件夹出错");
}
}
现在的问题 是 一个文件夹里有100个excel文件
能删除90个,还有10个是没有删除成功的
手动删除也是报的文件正在使用 不可以删除的提示
彻底删除就是把整个文件夹统统删除掉
关于如何关闭流,你可以去我写的文章
http://chenyong.javaeye.com/blog/288869
里面看看。
先关闭所有的流,然后再调用delete方法,是绝对可以删除文件的。ps: while((rtnPos=inStream.read(buffs)) >0)
response.getOutputStream().write(buffs,0,rtnPos);
response.getOutputStream().flush();
response.getOutputStream().close(); ServletOutputStream sos=response.getOutputStream();
先得到流以后在做。
还有一种作法,就是不产生excel文件,完全在内存里面做,这样不用产生临时文件
虽然后面调用了deleteFolder方法,但是可能有些文件没删掉。
f.delete()方法有返回值boolean标识是否删除成功的。