XML基礎知識——寫入資料到XML檔案(二)
阿新 • • 發佈:2018-12-31
一、寫入資料到XML檔案中
往XML檔案中寫入資料,特別要注意編碼問題,這裡寫入資料採用了兩種不同的編碼。一般情況下如果xml檔案時gb2312,就採用第一種方式,如果為UTF-8,就使用第二種方式寫入,否則可以會產生中文亂碼問題。
(1)、以UTF-8編碼寫入資料到XML檔案,原始碼如下:
(2)、以gb2312編碼寫入資料到XML檔案中,原始碼如下。/** * UTF-8格式:使用XML的Document物件寫資料到XML檔案 <br> * @param document xml的document * @param path xml的所在路徑(路徑+檔名全稱) * @param encoding 寫入資料編碼(以UTF-8編碼寫XML檔案,呼叫時直接寫UTF-8就可以,也可以使用其他編碼,但這裡會亂碼) */ public static void write2XML(Document document,String path,String encoding){ XMLWriter out = null; try { //OutputFormat.createPrettyPrint()主要是寫入資料保持xml檔案的格式 out = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File(path)),encoding),OutputFormat.createPrettyPrint()); out.write(document); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(out!=null) out.close(); } catch (IOException e) { UtilException ue = new UtilException("關閉XML輸出流失敗:"+e.getMessage(),e); LogUtil.exception(ue); } } }
/** * GB2312格式:使用XML的Document物件寫資料到XML檔案 <br> * @param document 對應XML檔案的Document物件 * @param path 對應的XML檔案路徑名稱(路徑+檔名全稱) */ public static void write2XML(Document document,String path){ XMLWriter out = null; try { //把document的內容寫到XML檔案中,保持XML特有的格式 OutputFormat format = OutputFormat.createPrettyPrint(); format.setEncoding("gb2312"); //設定編碼為UTF-8 out = new XMLWriter(new FileOutputStream(new File(path)),format); out.write(document); } catch (IOException e) { UtilException ue = new UtilException("寫XML檔案出錯:"+e.getMessage(),e); LogUtil.exception(ue); }finally{ try { if(out!=null) out.close(); } catch (IOException e) { UtilException ue = new UtilException("關閉XML輸出流失敗:"+e.getMessage(),e); LogUtil.exception(ue); } } }
二、寫入資料總結
(1)用字元流向檔案寫入資料要考慮亂碼問題,而用位元組流就不必考慮亂碼問題
(2)用字元流向檔案寫入資料預設使用本地碼錶即"gb2312"
(3)任何物件讀入記憶體都是以"UTF-8"編碼的形式存在
(4)預設情況下XMLWriter的write方法是以"UTF-8"的編碼形式將記憶體中的document物件傳給FileWriter,所以要想不發生亂碼問題,就要使用包裝流OutputStreamWriter並給定寫入檔案時所使用的編碼表,或者使用OutputFormat的setEncoding方法指定傳給流物件時所使用的編碼格式。