jvm占用文件导致文件不能删除,debug过程中尝试手动删除文件会提示“文件已在java platform se binary”中打开。
一般来说 java file.delete失败 有以下几个原因
1.看看是否被别的进程引用,手工删除试试(删除不了就是被别的进程占用)
2.file是文件夹 并且不为空,有别的文件夹或文件,
3.极有可能有可能自己前面没有关闭此文件的流
转载自:https://www.cnblogs.com/stono/p/6736767.html
但是添加了文件流关闭的语句之后依然没有解决我的问题,推测可能是流关闭的方式有问题,才想到应该在finally中关闭流才靠谱,去查书发现书里的写法也不是很好,于是查到了在try中关闭文件文件流的正确姿势。(感谢:https://blog.youkuaiyun.com/qq_27093465/article/details/52439754)
流在try外面声明,在try里面初始化,然后在finally里面给close,还记得处理异常e,finally里面close的时候也得再次try catch 一下。
private static void testCloseFileStream() {
final Logger LOG = LoggerFactory.getLogger(Cmshome.class);
String fileName = "";
InputStream inputStream = null;//声明个引用,因为这个new对象的时候也是会异常的
try {
//这里就会异常,如果文件名不存在的话。
inputStream = new FileInputStream(fileName);
} catch (IOException e) {
//这个主要是把出现的异常给人看见,不然就算异常了,看不到就找不到问题所在。
LOG.debug("loadProperties IOException:" + e.getMessage());
} finally {
if (inputStream != null) {
try {
inputStream.close(); // 关闭流
} catch (IOException e) {
LOG.debug("inputStream close IOException:" + e.getMessage());
}
}
}
}
}