成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Java解除文件占用即Dom4j操作后實現(xiàn)xml關(guān)流

一、背景

內(nèi)丘網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)公司!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)公司于2013年創(chuàng)立到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)公司。

項目中要解析xml,由于Dom4j的諸多優(yōu)點,我就用Dom4j解析xml,代碼如下:

public void readXML() {
    SAXReader reader = new SAXReader();
    Document doc = null;

    try {
      doc = reader.read(new File("demo.xml"));
      Element root = doc.getRootElement();

      /**
       * 其他代碼
       */
    } catch (DocumentException e) {
      e.printStackTrace();
    } 
}

查看Dom4j的api,你會發(fā)現(xiàn),不管是SAXReader,還是Document,都沒有提供關(guān)閉流資源的操作,我當時天真的以為Dom4j自動關(guān)閉流資源了,不用我們再關(guān)流了。

后來的某一天,由于業(yè)務(wù)的需要,需要在程序中刪除此xml,我發(fā)現(xiàn)不管我用file.deleteOnExit(),還是用file.delete()。都刪除不了此xml文件,顯示文件被占用,無法刪除,我自己用鼠標去刪除,也是顯示“操作無法完成 因為文件已在 Java™ Platform SE binary 中打開”,至此才發(fā)現(xiàn)Dom4j沒有關(guān)閉流資源,Dom4j當時給我的是幻覺,幸好線上xml文件不是特別多,不然要出生產(chǎn)事故了。

二、原因

Dom4j解析完xml沒有關(guān)閉連接。

三、解決方法

方法一、系統(tǒng)進行資源強制回收System.gc(),解除占用

但是System.gc()只是通知GC進行垃圾回收,但是啥時GC回收不知道,所以這個方法不一定一次成功,如果一次強制回收不成功,那就搞個循環(huán),多來幾次。

public boolean forceDelete(File file){
    boolean result=file.delete();
    if (!result) {
      System.gc();  //回收資源
      file.delete();
    }
    return result;
 }

方法二、在Dom4j中關(guān)閉流資源

這里沒有以內(nèi)部類的方式創(chuàng)建InputStream,而是顯示創(chuàng)建,然后關(guān)流(jdk1.7 try-with-resource語法)。

public void readXML() {
    SAXReader reader = new SAXReader();
    Document doc = null;

    try(FileInputStream fin = new FileInputStream("demo.xml")) {
      doc = reader.read(fin);
      Element root = doc.getRootElement();

      /**
       * 其他代碼
       */
    } catch (DocumentException e) {
      e.printStackTrace();
    } catch (FileNotFoundException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

四、建議

1、創(chuàng)建IO流如果不是特別需要,一般盡量不要使用“匿名內(nèi)部類”來創(chuàng)建;

2、使用IO流讀取文件,記得要在最后把流關(guān)閉了,不然會一直占著文件不放開,并且耗費資源。而且謹記:先創(chuàng)建的流最后關(guān)閉,且創(chuàng)建關(guān)閉一一對應(yīng)。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。

文章題目:Java解除文件占用即Dom4j操作后實現(xiàn)xml關(guān)流
本文URL:http://jinyejixie.com/article44/ppeeee.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供營銷型網(wǎng)站建設(shè)、標簽優(yōu)化App開發(fā)、全網(wǎng)營銷推廣手機網(wǎng)站建設(shè)、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司
太仆寺旗| 孟连| 通州市| 东海县| 鄂托克旗| 丁青县| 铅山县| 西畴县| 祁阳县| 毕节市| 湖北省| 宿州市| 肥东县| 阿荣旗| 临沧市| 阿城市| 宝兴县| 丰宁| 天台县| 罗江县| 阜阳市| 资阳市| 赣州市| 京山县| 永宁县| 呼和浩特市| 柳林县| 溆浦县| 盐津县| 盘山县| 金华市| 信宜市| 洛宁县| 滨州市| 孙吴县| 崇仁县| 仙游县| 霍林郭勒市| 尉氏县| 宁德市| 泗水县|