摘要:錯(cuò)誤糾正在輸入流操作完該文件后,輸出流再進(jìn)行文件操作,代碼糾正如下映射文件糾正增加的代碼文件未找到文件處理異常文件處理出現(xiàn)未知異常
1、問(wèn)題場(chǎng)景
由于需要對(duì)文本文件的部分內(nèi)容進(jìn)行更新操作,具體操作是需要先將文本文件內(nèi)容讀取出來(lá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、問(wèn)題現(xiàn)象
測(cè)試時(shí)發(fā)現(xiàn),原文本文件內(nèi)容會(huì)被清空,且未有內(nèi)容寫入,也無(wú)異常報(bào)錯(cuò)信息
4、分析推測(cè)通過(guò)分析推測(cè),輸入流未關(guān)閉的情況下,輸出流操作同一路徑文件,會(huì)造成沖突,輸入流會(huì)認(rèn)為該文件不存在并重新創(chuàng)建同名文件覆蓋原文件,而后輸入流實(shí)際讀取的是一個(gè)空文件,那么輸出流寫入的內(nèi)容也為空,最后造成文件內(nèi)容置空的現(xiàn)象。
5、錯(cuò)誤糾正在輸入流操作完該文件后,輸出流再進(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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/66359.html
摘要:我的是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)。因?yàn)槲倚睦砗芮宄?,我的目?biāo)是阿里。所以在收到阿里之后的那晚,我重新規(guī)劃了接下來(lái)的學(xué)習(xí)計(jì)劃,將我的短期目標(biāo)更新成拿下阿里轉(zhuǎn)正。 我的2017是忙碌的一年,從年初備戰(zhàn)實(shí)習(xí)春招,年三十都在死磕JDK源碼,三月份經(jīng)歷了阿里五次面試,四月順利收到實(shí)習(xí)offer。然后五月懷著忐忑的心情開(kāi)始了螞蟻金...
摘要:字節(jié)流可以處理所有以為單位存儲(chǔ)的文件,也就是說(shuō)可以處理所有的文件,但是在處理字符的速度上不如字符流。文件字節(jié)輸入流的讀取時(shí),是直接同字節(jié)流中讀取的。原理就是在字節(jié)流的基礎(chǔ)上增加了編解碼的操作。 前言 流是干什么的:為了永久性的保存數(shù)據(jù)。 IO流用來(lái)處理設(shè)備之間的數(shù)據(jù)傳輸(上傳和下載文件) java對(duì)數(shù)據(jù)的操作是通過(guò)流的方式。 java用于操作流的對(duì)象都在IO包中。 java IO系統(tǒng)...
閱讀 610·2021-11-18 13:12
閱讀 1328·2021-11-15 11:39
閱讀 2489·2021-09-23 11:22
閱讀 6224·2021-09-22 15:15
閱讀 3671·2021-09-02 09:54
閱讀 2322·2019-08-30 11:10
閱讀 3255·2019-08-29 14:13
閱讀 2919·2019-08-29 12:49