File.deleteOnExist

    今天发现在执行程序拷贝后会将所有的文件都删掉,当时我检查程序感觉问题很奇怪,开始怀疑是SWT(因为用这个来做界面是首次尝试)在退出销毁资源时将所有拷贝的文件作为资源一起销毁了。
    晚上回来后继续做了跟踪,最终发现问题出在拷贝文件时先检查文件是否存在,如果存在就将文件删掉的逻辑,其实这个逻辑本身也没有什么问题,问题出在调用了
    File.deleteOnExist()
    在仔细阅读API文档后发现
    Requests that the file or directory denoted by this abstract pathname be deleted when the virtual machine terminates. Deletion will be attempted only for normal termination of the virtual machine, as defined by the Java Language Specification.
    Once deletion has been requested, it is not possible to cancel the request. This method should therefore be used with care.
    
    Note: this method should not be used for file-locking, as the resulting protocol cannot be made to work reliably. The FileLock facility should be used instead.
    也就是说这个方法会在JVM销毁时做文件删除操作,并且特别说明这个方法不要用在文件锁的情况下。
    此时恍然大悟不是在SWT(此时又一次验证了SWT是没有问题的)销毁时删除了资源而是在JVM销毁是这个方法在做怪。
    最后为了不影响逻辑将这个方法的调用改为
    File.delete()
    
    这又一次让我领悟了对基础API的熟练掌握对一个程序员的重要性。
    借此与大家共勉,希望大家不要象我一样哦:)
    
    明天要做单元测试的研讨,这又让我想起来,如果对应的方法有好的单元测试,那这个问题肯定是可以发现的,但由于没有做单元测试的时间,所以当初这一点也就被忽略了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值