file.delete()不能删除的原因

mywayhome 2011-09-20 02:55:53
大致情况如下:
项目中需要将用户上传的excel文件解析后删除。
用户上传完文件提交时会触发一个请求,在方法里我得到上传文件后保存的路径名进行解析,之后删除文件,流程非常简单,只是到了删除的时候却怎么也删除不了文件。
我以为是流没有关闭的原因,索性把解析的步骤省略,在方法里直接得到文件路径后删除,还是不行。匪夷所思的是我调的file.delete()方法竟然返回true,返回true是删除成功了才返回,这是咋地?
索性新建了个项目,直接试了下上述的删除方法,正确无误。
愁死我了,这么个小玩意弄了半天了,望请各位出出招,实在不知道咋整了
...全文
21269 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
mywayhome 2011-12-16
  • 打赏
  • 举报
回复
已经知道原因了,是因为公司的开发平台有文件监控模块,删除文件操作只能是平台操作。所以不能删除文件。
雨天要吃饭 2011-09-21
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 wangjiangbo2 的回复:]
文件删除不了,应该是有其他方法或是软件在引用该文件。
file.delete()是肯定能删除文件的
[/Quote]
应该是这样的
wangjiangbo2 2011-09-21
  • 打赏
  • 举报
回复
文件删除不了,应该是有其他方法或是软件在引用该文件。
file.delete()是肯定能删除文件的
24K純帥 2011-09-20
  • 打赏
  • 举报
回复
估计是你的excel被打开的原因
teemai 2011-09-20
  • 打赏
  • 举报
回复
来学习下。上传时可以直接以流的形式获取到,11L是可以的
完美灬缺陷 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 mywayhome 的回复:]
搞定了,终于可以删除了,只是在删除时多加了一个getAbsoluteFile()再删除

Java code

public static void deleteFile(String localFileName) {
//localFileName = localFileName.replace("\\", "/");
File localFi……
[/Quote]
同求解释。
安心逍遥 2011-09-20
  • 打赏
  • 举报
回复
呵呵,解决了就好了

祝楼主好运
shine333 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mywayhome 的回复:]

引用 4 楼 shine333 的回复:
1 你解析的文件流有没有关闭
2 建议直接读取用户上传的数据流,而不是存为文件,再解析;一定要存文件的话,也是用File.createTempFile的方式,即使当时删除失败,也会在系统重启之类的时机被删除

1 不用流也不能删除
2 用户上传的是excel文件而不是数据流
谢谢,再帮忙想想
[/Quote]
2 你web开发版,上传只可能一种情形,我的意思就是直接获取用户的数据流,而不要保存文件。
mywayhome 2011-09-20
  • 打赏
  • 举报
回复 2
搞定了,终于可以删除了,只是在删除时多加了一个getAbsoluteFile()再删除
	
public static void deleteFile(String localFileName) {
//localFileName = localFileName.replace("\\", "/");
File localFile = new File(localFileName);
boolean flag = false;
if(localFile.isFile()&&localFile.exists()){
log.debug("localFile-Path-"+localFile.getPath()+"Ab "+localFile.getAbsolutePath());
log.debug("localFile-File-"+localFile+"Ab "+localFile.getAbsoluteFile());
log.debug("localFileName--"+localFileName);
flag = localFile.getAbsoluteFile().delete();
}
log.debug("文件" + localFileName + "是否删除成功:" + flag);
}

API中关于getAbsoluteFile方法的说明:
public File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。等同于 new File(this.getAbsolutePath())。
返回:
绝对抽象路径名,它与此抽象路径名表示相同的文件或目录
抛出:
SecurityException - 如果无法访问所需的系统属性值。
从以下版本开始:
1.2

搞不懂的是我打印的这些字符串竟然都是完全一样的,原来没有加这个方法就不能删除,但是delete方法也返回true。为什么看起来都是一样的绝对路径,不加方法就不能删除呢?
求解释...
b249833177 2011-09-20
  • 打赏
  • 举报
回复
java删除文件注意事项:1.路径上不能出现java认为的非法字符,如“(”,“)”等;

2.确保删除操作之前,文件不再被使用,即文件资源被释放!
完美灬缺陷 2011-09-20
  • 打赏
  • 举报
回复
1 不用流也不能删除

确认是否有软件占用该文件?
mywayhome 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 anly_hz 的回复:]
这是因为java自身的机制照成的,虽然file.delete()方法返回true,实际上这个文件可能还存在,手动调用system.gc()之后应该就可以了
[/Quote]
这种方法也试过,没效果。请问不用delete()方法还有方法强制删除吗?
mywayhome 2011-09-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 shine333 的回复:]
1 你解析的文件流有没有关闭
2 建议直接读取用户上传的数据流,而不是存为文件,再解析;一定要存文件的话,也是用File.createTempFile的方式,即使当时删除失败,也会在系统重启之类的时机被删除
[/Quote]
1 不用流也不能删除
2 用户上传的是excel文件而不是数据流
谢谢,再帮忙想想
anly_hz 2011-09-20
  • 打赏
  • 举报
回复
这是因为java自身的机制照成的,虽然file.delete()方法返回true,实际上这个文件可能还存在,手动调用system.gc()之后应该就可以了
shine333 2011-09-20
  • 打赏
  • 举报
回复
1 你解析的文件流有没有关闭
2 建议直接读取用户上传的数据流,而不是存为文件,再解析;一定要存文件的话,也是用File.createTempFile的方式,即使当时删除失败,也会在系统重启之类的时机被删除
OPPPPOP 2011-09-20
  • 打赏
  • 举报
回复
马克一下
看代码才能分析啊
jiangzi102 2011-09-20
  • 打赏
  • 举报
回复
在帮你定一下
jiangzi102 2011-09-20
  • 打赏
  • 举报
回复
我来刷分的

81,091

社区成员

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

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