file.delete()返回true,但是文件没有删除

背景

        在程序中生成了一个临时文件,使用完毕后需要删除它,选择的是file.delete()方法,得到的返回值显示true,但是文件依然存在;

 

执行main()方法后

 

file.delete()返回true,但是文件没有删除_第1张图片

问题

        1.检查删除前对文件使用的流都关闭了吗?结果都关闭了。

        2.手动删除文件看能否成功,是不是被其他进程占用?结果可以手动删除。

        3.断点调试file.delete()的源码,发现最后使用的是如下方法

private native boolean delete0(File f);

        这个时候,需要解释下native关键字的意义了:

1。native 是用做java 和其他语言(如c++)进行协作时用的也就是native 后的函数的实现不是用java写的

2。既然都不是java,那就别管它的源代码了,呵呵

native的意思就是通知操作系统,这个函数你必须给我实现,因为我要使用。所以native关键字的函数都是操作系统实现的,java只能调用。

    

原因

        其实很明显了,这里是系统执行的,系统在执行delete删除操作时检查发现这个文件被其他的程序(idea)占用了,所以没有删掉文件。

 

验证

        把路径改成没打开的、没被使用的试试,结果文件删除成功。


欢迎关注博主博客,后期博主会持续更新spring cloud alibaba 系列文章,敬请期待!        

你可能感兴趣的:(问题记录,java)