背景
在程序中生成了一个临时文件,使用完毕后需要删除它,选择的是file.delete()方法,得到的返回值显示true,但是文件依然存在;
执行main()方法后
问题
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 系列文章,敬请期待!