【JAVA】说说JAVA语言中的不靠谱方法

JAVA的File类中的 renameTo, delete 等方法,都是些不靠谱的方法,操作失败是常事。他们都有一个布尔的返回值,使用他们时要格外小心。

当file被占用时,这些方法就会返回false,即使很规矩的 in.close;out.close; 仍然会false,这个很是让人头疼。为此,只好绕道而行,比如,当前程序先记录下要操作的文件,再开一个程序去做操作,为得是file不被占用。这几天,也是遇到了这个问题,renameTo对一个文件夹中的文件重命名,一部分操作成功,一部分失败,而且总是那几个文件会失败。开始的时候,想到的是让流变量=null,这样让流失去对文件的引用(由于使用的是BufferedImage 没有close方法),但无济于事。在网上查了查,没有好的解决方法,这是上周的事了,然后周一来上班,打开IDE,刚看到这段代码,突然想到用gc,当然gc这个东西也不是靠谱的,程序员也只有通知的权力,仅此而已,执不执行,看他心情。

System.gc(); 
file.renameTo("xxxx");

还别说,果然好用了。

null与gc

前几天在看OC,然后吐槽OC里那个引用计数,感觉java有gc要好用的多,而今天就碰壁了。null就是放弃了引用权,等待gc的回收,可gc的回收并非即使的,在这期间,可能时间极短,但还是可能出现问题。而引用计数可以手动释放内存,主动性强,要比智能的gc更适用。

可惜JAVA没有引用计数这类的手动机制,所以只能用gc,在这种情况下,gc是否100%有用,还有待验证。

你可能感兴趣的:(【JAVA】说说JAVA语言中的不靠谱方法)