成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

輸入輸出流操作同一個(gè)文件的問(wèn)題及解決辦法

mtunique / 3377人閱讀

摘要:錯(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

相關(guān)文章

  • 阿里之路+Java面經(jīng)考點(diǎn)

    摘要:我的是忙碌的一年,從年初備戰(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)始了螞蟻金...

    姘擱『 評(píng)論0 收藏0
  • java學(xué)習(xí)(九) —— java中File文件操作IO概述

    摘要:字節(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)...

    ralap 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<