摘要:錯誤糾正在輸入流操作完該文件后,輸出流再進(jìn)行文件操作,代碼糾正如下映射文件糾正增加的代碼文件未找到文件處理異常文件處理出現(xiàn)未知異常
1、問題場景
由于需要對文本文件的部分內(nèi)容進(jìn)行更新操作,具體操作是需要先將文本文件內(nèi)容讀取出來,暫以字符串形式保存,然后進(jìn)行匹配替換,并將字符串重新寫入原文本文件中。
2、代碼規(guī)劃規(guī)劃使用BufferedReader進(jìn)行讀取,使用PrintWriter進(jìn)行寫入操作
BufferedReader br = null; PrintWriter pw = null; StringBuilder sqlMapConf = new StringBuilder(); try { File sqlMapConfFile = new File(sqlMapConfPath, name); br = new BufferedReader(new InputStreamReader( new FileInputStream(sqlMapConfFile), "UTF-8")); pw = new PrintWriter(sqlMapConfFile,"UTF-8"); String str = ""; while ((str = br.readLine())!=null) { sqlMapConf.append(str+" "); } str = sqlMapConf.toString().replaceFirst("*sqlMap映射文件*", config); pw.write(str); System.out.println(str); } catch (FileNotFoundException e) { throw new RuntimeException(name+"文件未找到!"); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(name+"文件IO處理異常!"); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(name+"文件處理出現(xiàn)未知異常!"); }finally { if (pw!=null) { pw.close(); } if (br!=null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } }3、問題現(xiàn)象
測試時發(fā)現(xiàn),原文本文件內(nèi)容會被清空,且未有內(nèi)容寫入,也無異常報錯信息
4、分析推測通過分析推測,輸入流未關(guān)閉的情況下,輸出流操作同一路徑文件,會造成沖突,輸入流會認(rèn)為該文件不存在并重新創(chuàng)建同名文件覆蓋原文件,而后輸入流實際讀取的是一個空文件,那么輸出流寫入的內(nèi)容也為空,最后造成文件內(nèi)容置空的現(xiàn)象。
5、錯誤糾正在輸入流操作完該文件后,輸出流再進(jìn)行文件操作,代碼糾正如下:
BufferedReader br = null; PrintWriter pw = null; StringBuilder sqlMapConf = new StringBuilder(); try { File sqlMapConfFile = new File(sqlMapConfPath, name); br = new BufferedReader(new InputStreamReader( new FileInputStream(sqlMapConfFile), "UTF-8")); // pw = new PrintWriter(sqlMapConfFile,"UTF-8"); String str = ""; while ((str = br.readLine())!=null) { sqlMapConf.append(str+" "); } str = sqlMapConf.toString().replaceFirst("*sqlMap映射文件*", config); pw = new PrintWriter(sqlMapConfFile,"UTF-8");//糾正增加的代碼 pw.write(str); System.out.println(str); } catch (FileNotFoundException e) { throw new RuntimeException(name+"文件未找到!"); } catch (IOException e) { e.printStackTrace(); throw new RuntimeException(name+"文件IO處理異常!"); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException(name+"文件處理出現(xiàn)未知異常!"); }finally { if (pw!=null) { pw.close(); } if (br!=null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/66359.html
摘要:我的是忙碌的一年,從年初備戰(zhàn)實習(xí)春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實習(xí)。因為我心理很清楚,我的目標(biāo)是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來的學(xué)習(xí)計劃,將我的短期目標(biāo)更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實習(xí)春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實習(xí)offer。然后五月懷著忐忑的心情開始了螞蟻金...
摘要:字節(jié)流可以處理所有以為單位存儲的文件,也就是說可以處理所有的文件,但是在處理字符的速度上不如字符流。文件字節(jié)輸入流的讀取時,是直接同字節(jié)流中讀取的。原理就是在字節(jié)流的基礎(chǔ)上增加了編解碼的操作。 前言 流是干什么的:為了永久性的保存數(shù)據(jù)。 IO流用來處理設(shè)備之間的數(shù)據(jù)傳輸(上傳和下載文件) java對數(shù)據(jù)的操作是通過流的方式。 java用于操作流的對象都在IO包中。 java IO系統(tǒng)...
閱讀 654·2021-11-18 13:12
閱讀 1394·2021-11-15 11:39
閱讀 2544·2021-09-23 11:22
閱讀 6296·2021-09-22 15:15
閱讀 3728·2021-09-02 09:54
閱讀 2378·2019-08-30 11:10
閱讀 3312·2019-08-29 14:13
閱讀 2965·2019-08-29 12:49