亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、背景

  項目中要解析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)閉流資源的操作,我當(dāng)時天真的以為Dom4j自動關(guān)閉流資源了,不用我們再關(guān)流了。

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

二、原因

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

三、解決方法

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

  但是System.gc()只是通知GC進(jìn)行垃圾回收,但是啥時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)閉了,不然會一直占著文件不放開,并且耗費資源。而且謹(jǐn)記:先創(chuàng)建的流最后關(guān)閉,且創(chuàng)建關(guān)閉一一對應(yīng)。

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

相關(guān)文章

  • mybatis if test 不為空字符串或null的解決

    mybatis if test 不為空字符串或null的解決

    這篇文章主要介紹了mybatis if test 不為空字符串或null的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • SpringBoot復(fù)雜參數(shù)應(yīng)用詳細(xì)講解

    SpringBoot復(fù)雜參數(shù)應(yīng)用詳細(xì)講解

    我們在編寫接口時會傳入復(fù)雜參數(shù),如Map、Model等,這種類似的參數(shù)會有相應(yīng)的參數(shù)解析器進(jìn)行解析,并且最后會將解析出的值放到request域中,下面我們一起來探析一下其中的原理
    2022-09-09
  • 解決Maven不能下載Aspose的問題

    解決Maven不能下載Aspose的問題

    這篇文章主要介紹了解決Maven不能下載Aspose的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • idea 在springboot中使用lombok插件的方法

    idea 在springboot中使用lombok插件的方法

    這篇文章主要介紹了idea 在springboot中使用lombok的相關(guān)資料,通過代碼給大家介紹在pom.xml中引入依賴的方法,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2021-08-08
  • idea中如何全局搜索class文件或者字符串

    idea中如何全局搜索class文件或者字符串

    這篇文章主要介紹了idea中如何實現(xiàn)全局搜索class文件或者字符串問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • maven的pom.xml中repositories和distributionManagement使用

    maven的pom.xml中repositories和distributionManagement使用

    這篇文章主要介紹了maven的pom.xml中repositories和distributionManagement使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 一看就懂 詳解JAVA泛型通配符T,E,K,V區(qū)別

    一看就懂 詳解JAVA泛型通配符T,E,K,V區(qū)別

    泛型從字面上理解,是指一個類、接口或方法支持多種類型,使之廣泛化、一般化和更加通用。通配符只有在修飾一個變量時會用到,使用它可方便地引用包含了多種類型的泛型;下面我們來深入了解一下吧
    2019-06-06
  • Java線程的并發(fā)工具類實現(xiàn)原理解析

    Java線程的并發(fā)工具類實現(xiàn)原理解析

    本文給大家講解Java線程的并發(fā)工具類的一些知識,通過適用場景分析大數(shù)據(jù)量統(tǒng)計類任務(wù)的實現(xiàn)原理和封裝,多個示例代碼講解的非常詳細(xì),對java線程并發(fā)工具類相關(guān)知識感興趣的朋友一起學(xué)習(xí)下吧
    2021-06-06
  • Java中replace、replaceAll和replaceFirst函數(shù)的用法小結(jié)

    Java中replace、replaceAll和replaceFirst函數(shù)的用法小結(jié)

    相信會java的同學(xué)估計都用過replace、replaceAll、replaceFirst這三個函數(shù),可是,我們真的懂他們嗎?下面通過這篇文章大家再來好好學(xué)習(xí)學(xué)習(xí)下這幾個函數(shù)。
    2016-09-09
  • 詳解Spring Cloud Config采用Git存儲時兩種常用的配置策略

    詳解Spring Cloud Config采用Git存儲時兩種常用的配置策略

    這篇文章主要介紹了詳解Spring Cloud Config采用Git存儲時兩種常用的配置策略,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07

最新評論