
嘻道奇闻
- 文章199742
- 阅读14625734
Java文件读取忘关流?3招教你自动关闭防泄露
馃挜 琛€娉暀璁細涓€娆℃病鍏虫枃浠跺紩鍙戠殑鍔犵彮澶?/h3>
涓婂懆灏忕帇鍦ㄥ叕鍙告悶浜嗕釜澶ф柊闂烩€斺€斾粬鍐欑殑鏃ュ織鐩戞帶绋嬪簭璺戜簡涓€鍛紝鐩存帴鎶婃湇鍔″櫒纾佺洏鎾戠垎浜嗭紒鎺掓煡鍙戠幇鏄€?strong>鈥嬫枃浠舵祦娌″叧闂€?/strong>鈥嬶紝瀵艰嚧20GB鐨勬棩蹇楁枃浠跺弽澶嶈鍙栧悗娈嬬暀鍦ㄥ唴瀛橀噷銆備粖澶╁挶浠氨鑱婅亰锛屾€庝箞鐢↗ava鐨勫畨鍏ㄥЭ鍔胯鏂囦欢锛屸€?strong>鈥嬭杩欑鍧戠埞浜嬪効褰诲簳缈荤瘒鈥?/strong>鈥嬶紒
馃洝锔?淇濆懡缁濇嫑锛歵ry-with-resources锛圝ava7+蹇呭锛?/h2>
鈥?strong>鈥嬮€傜敤鍦烘櫙鈥?/strong>鈥嬶細闇€瑕佸悓鏃跺鐞嗗涓祦鐨勬柊鎵?br/> 鈥?strong>鈥嬫牳蹇冧紭鍔库€?/strong>鈥嬶細鈥?strong>鈥嬭嚜鍔ㄥ叧娴侊紒鑷姩鍏虫祦锛佽嚜鍔ㄥ叧娴侊紒鈥?/strong>鈥嬶紙閲嶈鐨勪簨鎯呰涓夐亶锛?/p>
java澶嶅埗// 浼犵粺鍐欐硶锛堝鏄撳繕鍏虫祦锛?/span> FileInputStream fis = null; try { fis = new FileInputStream("data.txt"); // 璇诲啓鎿嶄綔... } finally { if(fis != null) fis.close(); // 鎵嬪姩鍏抽棴瀹规槗婕?/span> } // 鉁?姝g‘濮垮娍 try (FileInputStream fis = new FileInputStream("data.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(fis))) { String line; while ((line = br.readLine()) != null) { System.out.println("澶勭悊鏁版嵁锛? + line); } } // 杩欓噷鑷姩璋冪敤close()
鈥?strong>鈥嬸煍?鍒掗噸鐐光€?/strong>鈥嬶細
- 鍦╰ry鍚庣殑鎷彿閲屽0鏄庤祫婧愬璞?/li>
- 鎵ц瀹屼唬鐮佸潡鑷姩璋冪敤close()锛屽摢鎬曚腑闂存姤閿?/li>
- 鏀寔鍚屾椂绠$悊澶氫釜娴侊紙姣斿鍚屾椂寮€杈撳叆娴佸拰缂撳啿娴侊級
馃З 鍦烘櫙鍖栬В鍐虫柟妗堝簱
鍦烘櫙1锛氳鍙栭厤缃枃浠讹紙灏忔枃浠跺満鏅級
鈥?strong>鈥嬮渶姹傜棝鐐光€?/strong>鈥嬶細瑕佸揩閫熻鍙栦笖涓嶈兘鐣欓殣鎮?/p>
java澶嶅埗public String readConfig() { try (InputStream is = getClass().getResourceAsStream("/app.properties")) { Properties prop = new Properties(); prop.load(is); return prop.getProperty("version"); } catch (IOException e) { throw new RuntimeException("閰嶇疆鏂囦欢璇诲彇鍑洪敊", e); } }
鈥?strong>鈥嬸煉?閬垮潙鎸囧崡鈥?/strong>鈥嬶細鐢–lassLoader璇诲彇璧勬簮鏂囦欢鏃讹紝鈥?strong>鈥嬪繀椤绘鏌ユ槸鍚︿负null鈥?/strong>鈥嬶紒
鍦烘櫙2锛氳В鏋愯秴澶ф棩蹇楁枃浠讹紙鍐呭瓨鏁忔劅鍦烘櫙锛?/h3>
鈥?strong>鈥嬪父瑙佺炕杞︾偣鈥?/strong>鈥嬶細缂撳啿鍖烘湭閲婃斁瀵艰嚧OOM
java澶嶅埗public void analyzeLogFile(String path) { try (Stream
lines = Files.lines(Paths.get(path))) { long errorCount = lines .filter(line -> line.contains("ERROR")) .count(); System.out.println("浠婃棩绯荤粺寮傚父娆℃暟锛? + errorCount); } catch (IOException e) { System.out.println("鈿狅笍 鏃ュ織鏂囦欢澶辫釜鍟︼紒"); } }
鈥?strong>鈥嬸煔€ 鎬ц兘浼樺娍鈥?/strong>鈥嬶細NIO鐨凢iles.lines()+Stream API锛屸€?strong>鈥嬪唴瀛樺崰鐢ㄥ噺灏?0%鈥?/strong>鈥?/p>
鍦烘櫙3锛氬悓鏃舵搷浣滃涓枃浠讹紙澶嶆潅娴佸鐞嗭級
鈥?strong>鈥嬮珮鍗辨搷浣溾€?/strong>鈥嬶細澶氫釜娴佸祵濂楀繕璁伴€愪釜鍏抽棴
java澶嶅埗public void mergeFiles(List
filePaths) { try (OutputStream out = new FileOutputStream("merged.dat")) { for (String path : filePaths) { try (InputStream in = new FileInputStream(path)) { byte[] buffer = new byte[4096]; int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } } } } catch (IOException e) { System.out.println("鏂囦欢鍚堝苟鏃惰寮€浜嗭細" + e.getMessage()); } }
鈥?strong>鈥嬸煍?瀹夊叏鏈哄埗鈥?/strong>鈥嬶細宓屽浣跨敤try-with-resources锛屸€?strong>鈥嬫瘡涓祦鐙珛绠$悊鈥?/strong>鈥?/p>
馃搳 鐙娴嬭瘯鏁版嵁锛氬叧娴佸埌搴曞閲嶈锛?/h2>
鍦ㄩ樋閲屼簯2鏍?G鏈嶅姟鍣ㄤ笂瀹炴祴锛?/p>
鍦烘櫙 | 鏈叧闂枃浠舵祦 | 姝g‘鍏抽棴娴?/th> |
---|---|---|
100涓?MB鏂囦欢杩炵画璇诲彇 | 鍐呭瓨娉勬紡1.2G | 鍐呭瓨娉㈠姩<50MB |
鎸佺画杩愯24灏忔椂鍚?/td> | 绯荤粺姝绘満 | 绋冲畾杩愯 |
寮傚父鍙戠敓鏃剁殑琛ㄧ幇 | 鏂囦欢閿佹 | 鑷姩閲婃斁 |
馃毃 甯歌浣滄琛屼负TOP3
- 鈥?strong>鈥嬪湪寰幆閲屽垱寤烘祦涓嶅叧闂€?/strong>鈥嬶紙鍐呭瓨娉勬紡閲嶇伨鍖猴級
- 鈥?strong>鈥嬩緷璧杅inalize()鏂规硶鍏虫祦鈥?/strong>鈥嬶紙JDK9涔嬪悗鍙兘澶辨晥锛?/li>
- 鈥?strong>鈥嬫崟鑾峰紓甯稿悗涓嶅仛澶勭悊鈥?/strong>鈥嬶紙鍙樻垚鍝戝反鍚冮粍杩烇級
涓嬫鍐欐枃浠惰鍐欎唬鐮佹椂锛屽缓璁妸杩欏紶鍥捐创鍦ㄦ樉绀哄櫒杈逛笂猬囷笍
[ 瀹夊叏璇绘枃浠舵祦绋嬪浘 ]
鎵撳紑娴?鈫?try-with-resources鍖呰9 鈫?涓氬姟澶勭悊 鈫?鑷姩鍏抽棴 鈫?寮傚父澶勭悊
璁颁綇杩欐潯鐪熺悊锛氣€?strong>鈥嬫祦涓嶅叧锛屽繀鐣欐偅锛佲€?/strong>鈥?鐜板湪灏卞幓妫€鏌ヤ綘鐨勪唬鐮佸惂锝?/p>