前些時(shí)候需要把項(xiàng)目中的文本文件都從GBK編碼轉(zhuǎn)換為UTF-8編碼. 如果要手動(dòng)的一個(gè)個(gè)的改, 那可費(fèi)事了. 反正想學(xué)學(xué)Groovy, 就用Groovy做的轉(zhuǎn)換腳本吧.
代碼如下:
def?cfg?=?[
????src?:?
'e:\\src',
????out?:?
'e:\\out'
];
def?dir?
=?new?File(cfg.src);
def?out_dir?
=?new?File(cfg.out);
if(!out_dir.exists())?out_dir.mkdirs();
dir.eachFileRecurse{?f?
->
??println?f.path
??def?out?
=?"${cfg.out}\\${f.path.substring(cfg.out.length())}"
??def?of?
=?new?File(out)
??
if(f.isDirectory()?&&?!of.exists()){
????of.mkdirs()
??}?
else?{
????
if(!of.exists()){
??????of.delete();
????}
????of.createNewFile();
????
byte[]?head?=?[-17,-69,-65]
????of.newOutputStream()?
<<?head
????f.eachLine{?line?
->
??????of.append(line
+'\n','UTF-8');
????}
??}
}

在cfg中定義 輸入目錄和輸出目錄
然后遞歸的遍歷目錄中的文件, 用GKB編碼讀進(jìn)來(lái), 再用UTF-8編碼寫出去.
其中有一段
??? byte[]?head?=?[-17,-69,-65]
????of.newOutputStream()?
<<?head
因?yàn)閁TF-8編碼有with Signature和without Signature兩種.就是文件開頭的EF BB BF
如果你需要without Signature的就把這兩句去掉.