1
loqixh 2019-12-04 16:32:42 +08:00 via Android 1
因为 linux 文件正在使用也可以删除,win 不行
|
2
geelaw 2019-12-04 16:38:12 +08:00 via iPhone 1
|
3
willxiang OP 谢楼上二位老哥,我再找找原因
|
4
qwerthhusn 2019-12-04 16:56:30 +08:00 1
程序中出现了未正确关闭的流吧
|
5
xomix 2019-12-04 17:22:03 +08:00
unix 文件没有独占模式阻断删除的,所以可以直接删除,Windows 下为了稳定性等问题考虑在你读取文件的时候也可以加独占模式独占文件阻断删除,那肯定是你代码中文件打开方式不对( java 调用 winapi )或者打开后没有关闭文件
|
6
Kimipoker 2019-12-04 17:41:42 +08:00
注意下 是不是没有用那个文件打开过流 要关了 . 我之前就是这样. 用 try(OutputStream steram =....) {}这种操作,finally 里面写删除看看
|
7
wangxiaoaer 2019-12-04 17:44:49 +08:00 via Android
没准是杀软在后台扫描?
|
8
hezhuohua 2019-12-04 18:59:00 +08:00
win 上的 delete 如果还有子文件或子文件夹是删不掉的,但 linux 可以,所以 win 上你要递归删
|
9
evilhero 2019-12-04 19:01:52 +08:00 via Android
我记得好像和回收站有关系,以前遇到过,忘了
|
10
mmdsun 2019-12-04 19:04:38 +08:00 via Android
怀疑路径不对。
1.是否转化了正确的路径?比如使用了 File.separator。 2.当 Java 代码删除失败的时候,可以把路径打印出来吗? 3.删除失败的时候,用 Windows 电脑右键直接删除可以成功吗? 你可以在 Windows 上打开“资源监视器”窗口中,依次点击“cpu”——>“关联的句柄”搜索你删除失败的文件看看文件是否被某些进程占用。 这里有一个强制删除的代码适用于 Linux,Windows,MacOS 等: https : //github.com/classgraph/classgraph/blob/master/src/main/java/nonapi/io/github/classgraph/ utils / FileUtils.java # L606 清理完后 ByteBuffer,您可以删除文件。但是,请确保 ByteBuffer 在清理后再也不使用它,否则 JVM 将崩溃。 |
11
kawowa 2019-12-04 19:07:34 +08:00 via Android
可以用\\\\代替\来试试
|
12
willxiang OP @qwerthhusn #4
@xomix #5 @Kimipoker #6 @wangxiaoaer #7 @hezhuohua #8 @evilhero #9 @mmdsun #10 @kawowa #11 感谢楼上各位大佬的回复,问题还未解决但已经定位到一个大概范围了。 项目是在某开源项目上二次开发的,而我是下午才从仓库拉下来的,还不太熟悉这一块具体的功能代码, 目前大概确定应该是某个地方开了流但可能没有正确的 close()掉, 因为我测试时创建的文件(会生成 2 个 json ),一创建完成后,a.json 就能正常删除,b.json 就直接被占用了(问题就出在 b.json 上) 删除是使用的递归方式,排除子文件或者文件夹的问题。 应该在加会儿班就能解决 |
13
chengquan223 2019-12-05 13:46:28 +08:00
我一看头像就知道是你。。。
|
14
willxiang OP @chengquan223 #13
|