1. 程式人生 > >XML基礎知識——寫入資料到XML檔案(二)

XML基礎知識——寫入資料到XML檔案(二)

一、寫入資料到XML檔案中

往XML檔案中寫入資料,特別要注意編碼問題,這裡寫入資料採用了兩種不同的編碼。一般情況下如果xml檔案時gb2312,就採用第一種方式,如果為UTF-8,就使用第二種方式寫入,否則可以會產生中文亂碼問題。

(1)、以UTF-8編碼寫入資料到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);
			}
		}
	}
(2)、以gb2312編碼寫入資料到XML檔案中,原始碼如下。
/**
	 * 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方法指定傳給流物件時所使用的編碼格式。