java中如何彻底删除文件?

cnhuai 2009-05-18 04:49:34
下面的代码是从数据库中取数据生成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();
%>
...全文
2862 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenqiang0302 2009-07-10
  • 打赏
  • 举报
回复
看下要删除的文件的操作的流是否关闭了,如果没有关闭无法删除的
cuij7718 2009-07-10
  • 打赏
  • 举报
回复
恩,应该是流没有关闭
还有一种作法,就是不产生excel文件,完全在内存里面做,这样不用产生临时文件
cy729215495 2009-07-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();
先得到流以后在做。
cnhuai 2009-07-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 bigbug9002 的回复:]
什么是彻底删除一个文件呢?
据说,你得用0把文件占用的磁盘写一遍,再用1写一遍,反复几次能达成不让高手回复的效果。

:)
[/Quote]
彻底删除文件就是从硬盘中删除了,没你说的这么技术
现在的问题 是 一个文件夹里有100个excel文件
能删除90个,还有10个是没有删除成功的
手动删除也是报的文件正在使用 不可以删除的提示
彻底删除就是把整个文件夹统统删除掉
superhanliu 2009-07-10
  • 打赏
  • 举报
回复
createZip方法的代码贴出来看看,可能这儿里面有没有关闭的stream。
虽然后面调用了deleteFolder方法,但是可能有些文件没删掉。
f.delete()方法有返回值boolean标识是否删除成功的。
bancaosen 2009-07-08
  • 打赏
  • 举报
回复
学习中,路过
bigbug9002 2009-07-08
  • 打赏
  • 举报
回复
什么是彻底删除一个文件呢?
据说,你得用0把文件占用的磁盘写一遍,再用1写一遍,反复几次能达成不让高手回复的效果。

:)
cnhuai 2009-07-08
  • 打赏
  • 举报
回复
解决办法,在操作文件之前把所有对此文件的流都关掉。

-----------------
要关哪些流呢
我尝试关了一些
还是不能完全删除
Miracle1216 2009-07-08
  • 打赏
  • 举报
回复
没遇到这种问题!
still_r 2009-05-28
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 kokobox 的回复:]
在window下手动删除提示文件被使用,

是因为文件被锁了,文件句柄被流操作所占用。才会出现你说的这样的情况。

在删除zip中的部分内容后,其他文件句柄可能在内存中被程序所占用。

解决办法,在操作文件之前把所有对此文件的流都关掉。
[/Quote]

正解 ~
zhaodalong 2009-05-27
  • 打赏
  • 举报
回复
所有对此文件的流都关掉。
清空一下缓存!
j1223jesus 2009-05-27
  • 打赏
  • 举报
回复
File还有一种是程序退出时删除文件的delete方法,具体查查api
kokobox 2009-05-27
  • 打赏
  • 举报
回复
在window下手动删除提示文件被使用,

是因为文件被锁了,文件句柄被流操作所占用。才会出现你说的这样的情况。

在删除zip中的部分内容后,其他文件句柄可能在内存中被程序所占用。

解决办法,在操作文件之前把所有对此文件的流都关掉。
calendarian 2009-05-27
  • 打赏
  • 举报
回复
我也遇到过这种问题
cnhuai 2009-05-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 a276202460 的回复:]
你貌似 createZip(path+timePath+random,path+timePath+random+".zip");
File zipFile=new File(path+timePath+random+".zip");

一个压缩文件就有一个excel文件 而且你生成的excel文件根本没有删除操作 ,应该在createZip
方法里 打包完成后 删除此excel文件
[/Quote]
delFolder(path+timePath+random);这个函数就删除了你说的excel文件及所属的文件夹

public void delFolder(String folderPath)
{
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("删除文件夹出错");
}
}
一洽客服系统 2009-05-18
  • 打赏
  • 举报
回复
你貌似 createZip(path+timePath+random,path+timePath+random+".zip");
File zipFile=new File(path+timePath+random+".zip");

一个压缩文件就有一个excel文件 而且你生成的excel文件根本没有删除操作 ,应该在createZip
方法里 打包完成后 删除此excel文件

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧