项目中需要将用户上传的excel文件解析后删除。
用户上传完文件提交时会触发一个请求,在方法里我得到上传文件后保存的路径名进行解析,之后删除文件,流程非常简单,只是到了删除的时候却怎么也删除不了文件。
我以为是流没有关闭的原因,索性把解析的步骤省略,在方法里直接得到文件路径后删除,还是不行。匪夷所思的是我调的file.delete()方法竟然返回true,返回true是删除成功了才返回,这是咋地?
索性新建了个项目,直接试了下上述的删除方法,正确无误。
愁死我了,这么个小玩意弄了半天了,望请各位出出招,实在不知道咋整了
18 个解决方案
#1
我来刷分的
#2
在帮你定一下
#3
马克一下
看代码才能分析啊
看代码才能分析啊
#4
1 你解析的文件流有没有关闭
2 建议直接读取用户上传的数据流,而不是存为文件,再解析;一定要存文件的话,也是用File.createTempFile的方式,即使当时删除失败,也会在系统重启之类的时机被删除
2 建议直接读取用户上传的数据流,而不是存为文件,再解析;一定要存文件的话,也是用File.createTempFile的方式,即使当时删除失败,也会在系统重启之类的时机被删除
#5
这是因为java自身的机制照成的,虽然file.delete()方法返回true,实际上这个文件可能还存在,手动调用system.gc()之后应该就可以了
#6
1 不用流也不能删除
2 用户上传的是excel文件而不是数据流
谢谢,再帮忙想想
#7
这种方法也试过,没效果。请问不用delete()方法还有方法强制删除吗?
#8
1 不用流也不能删除
确认是否有软件占用该文件?
确认是否有软件占用该文件?
#9
java删除文件注意事项:1.路径上不能出现java认为的非法字符,如“(”,“)”等;
2.确保删除操作之前,文件不再被使用,即文件资源被释放!
#10
搞定了,终于可以删除了,只是在删除时多加了一个getAbsoluteFile()再删除
API中关于getAbsoluteFile方法的说明:
public File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。等同于 new File(this.getAbsolutePath())。
返回:
绝对抽象路径名,它与此抽象路径名表示相同的文件或目录
抛出:
SecurityException - 如果无法访问所需的系统属性值。
从以下版本开始:
1.2
搞不懂的是我打印的这些字符串竟然都是完全一样的,原来没有加这个方法就不能删除,但是delete方法也返回true。为什么看起来都是一样的绝对路径,不加方法就不能删除呢?
求解释...
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。为什么看起来都是一样的绝对路径,不加方法就不能删除呢?
求解释...
#11
2 你web开发版,上传只可能一种情形,我的意思就是直接获取用户的数据流,而不要保存文件。
#12
呵呵,解决了就好了
祝楼主好运
祝楼主好运
#13
同求解释。
#14
来学习下。上传时可以直接以流的形式获取到,11L是可以的
#15
估计是你的excel被打开的原因
#16
文件删除不了,应该是有其他方法或是软件在引用该文件。
file.delete()是肯定能删除文件的
file.delete()是肯定能删除文件的
#17
应该是这样的
#18
已经知道原因了,是因为公司的开发平台有文件监控模块,删除文件操作只能是平台操作。所以不能删除文件。
#1
我来刷分的
#2
在帮你定一下
#3
马克一下
看代码才能分析啊
看代码才能分析啊
#4
1 你解析的文件流有没有关闭
2 建议直接读取用户上传的数据流,而不是存为文件,再解析;一定要存文件的话,也是用File.createTempFile的方式,即使当时删除失败,也会在系统重启之类的时机被删除
2 建议直接读取用户上传的数据流,而不是存为文件,再解析;一定要存文件的话,也是用File.createTempFile的方式,即使当时删除失败,也会在系统重启之类的时机被删除
#5
这是因为java自身的机制照成的,虽然file.delete()方法返回true,实际上这个文件可能还存在,手动调用system.gc()之后应该就可以了
#6
1 不用流也不能删除
2 用户上传的是excel文件而不是数据流
谢谢,再帮忙想想
#7
这种方法也试过,没效果。请问不用delete()方法还有方法强制删除吗?
#8
1 不用流也不能删除
确认是否有软件占用该文件?
确认是否有软件占用该文件?
#9
java删除文件注意事项:1.路径上不能出现java认为的非法字符,如“(”,“)”等;
2.确保删除操作之前,文件不再被使用,即文件资源被释放!
#10
搞定了,终于可以删除了,只是在删除时多加了一个getAbsoluteFile()再删除
API中关于getAbsoluteFile方法的说明:
public File getAbsoluteFile()返回此抽象路径名的绝对路径名形式。等同于 new File(this.getAbsolutePath())。
返回:
绝对抽象路径名,它与此抽象路径名表示相同的文件或目录
抛出:
SecurityException - 如果无法访问所需的系统属性值。
从以下版本开始:
1.2
搞不懂的是我打印的这些字符串竟然都是完全一样的,原来没有加这个方法就不能删除,但是delete方法也返回true。为什么看起来都是一样的绝对路径,不加方法就不能删除呢?
求解释...
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。为什么看起来都是一样的绝对路径,不加方法就不能删除呢?
求解释...
#11
2 你web开发版,上传只可能一种情形,我的意思就是直接获取用户的数据流,而不要保存文件。
#12
呵呵,解决了就好了
祝楼主好运
祝楼主好运
#13
同求解释。
#14
来学习下。上传时可以直接以流的形式获取到,11L是可以的
#15
估计是你的excel被打开的原因
#16
文件删除不了,应该是有其他方法或是软件在引用该文件。
file.delete()是肯定能删除文件的
file.delete()是肯定能删除文件的
#17
应该是这样的
#18
已经知道原因了,是因为公司的开发平台有文件监控模块,删除文件操作只能是平台操作。所以不能删除文件。