最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時(shí)間:2020年04月08日 10:10:05   作者:Erneste  
這篇文章主要介紹了Java解除文件占用即Dom4j操作后實(shí)現(xiàn)xml關(guān)流,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

一、背景

  項(xiàng)目中要解析xml,由于Dom4j的諸多優(yōu)點(diǎn),我就用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,你會(huì)發(fā)現(xiàn),不管是SAXReader,還是Document,都沒有提供關(guān)閉流資源的操作,我當(dāng)時(shí)天真的以為Dom4j自動(dòng)關(guān)閉流資源了,不用我們?cè)訇P(guān)流了。

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

二、原因

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

三、解決方法

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

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

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語(yǔ)法)。

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)部類”來(lái)創(chuàng)建;

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

湘乡市| 牟定县| 嘉兴市| 怀柔区| 彩票| 孙吴县| 崇明县| 云林县| 望江县| 彩票| 建德市| 鲁山县| 安康市| 高青县| 裕民县| 沂南县| 高陵县| 阿图什市| 健康| 宿松县| 抚松县| 铜鼓县| 吉隆县| 唐山市| 法库县| 弋阳县| 伽师县| 巴林左旗| 微博| 两当县| 丰顺县| 西峡县| 龙泉市| 泰兴市| 万荣县| 绿春县| 田林县| 阆中市| 连州市| 太和县| 南川市|