案例1:
現象:同事做本地txt資料切分然後處理,發現刪除本地臨時檔案目錄中的檔案時,有時成功,有時刪除完了發現檔案還在。**各處都不報錯,且各種日誌列印正常。
解決:最後發現,是業務邏輯**中有一處fileinputstream流讀取檔案後,沒有關流,導致的。
--------
案例2:
現象:同事往遠端ftp伺服器上上傳txt檔案,在兩處業務邏輯中呼叫同乙個上傳工具類方法(此方法為他自己寫的),發現乙個可以成功上傳,而另一處呼叫上傳完ftp上沒有檔案。
解決:各種折騰,最後發現,因為其使用的是在業務邏輯**前先建立連線到ftp,然後在下面的業務邏輯中各種操作,然後有的地方建立連線後,又 ftpclient.logout(); 退出了,而有的地方使用完,卻沒有 ftpclient.logout();
總結:
使用io時,一定要注意,各種流在使用完一定要馬上關閉,否則在複雜的**中可能造成各種不易查詢的奇怪問題。
使用遠端連線(如ftp)時,一定要注意資源的開啟和關閉要成對出現。最好把每種操作都封裝成獨立的開啟資源、處理資源、關閉資源乙個方法中。盡量不要開啟資源後就一通幾百行**的操作,最後也不知道在哪需要關閉資源。
1 7以後 io流自關閉資源的方式
jdk1.7的關閉資源的方式 流的父類 都實現乙個介面 autocloseable 可能自動關閉的介面 1.7新特性 fileintpustream fis null fileoutputstream fos null try 要自動關閉的流 前提是該類必須實現了autocloseable介面 該處...
STM32關閉全域性中斷時需要注意的問題
stm32在使用時有時需要禁用全域性中斷,比如mcu在公升級過程中需禁用外部中斷,防止公升級過程中外部中斷觸發導致公升級失敗。arm mdk中提供了如下兩個介面來禁用和開啟總中斷 disable irq 關閉總中斷 enable irq 開啟總中斷 但測試發現這樣乙個問題,在關閉總中斷後,如果有中斷...
關閉使用者開啟的程序處理
關閉使用者開啟的程序處理 use master go if exists select from dbo.sysobjects where id object id n dbo p killspid and objectproperty id,n isprocedure 1 drop procedu...