java调用文件删除方法delete()时无法删除文件(文件流已经关闭依然无法删除)

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.csdn.net/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());  
               }  
           }  
       }  
   }  
  }

你可能感兴趣的:(经验教训)