生活随笔
收集整理的這篇文章主要介紹了
移除UTF-8文件头的BOM
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
來(lái)源:http://blog.csdn.net/inkfish/article/details/6059254
UTF-8 BOM又叫UTF-8 簽名,在UTF-8文件的頭部,長(zhǎng)度為3個(gè)字節(jié)。其實(shí)UTF-8 的BOM對(duì)UFT-8沒(méi)有作用,BOM簽名的意思就是告訴編輯器當(dāng)前文件采用何種編碼,方便編輯器識(shí)別。但是在Eclipse中,帶有BOM的java源碼生成javadoc時(shí)卻會(huì)出現(xiàn)如下錯(cuò)誤:
[java]?view plaincopy
E:/workspace/Test/src/express/ExpType.java:1:?非法字符:?/65279?? ?package?express;?? ^??
一個(gè)個(gè)修改是個(gè)辦法,但是面對(duì)幾百上幾千個(gè)的源文件,一個(gè)個(gè)去修改決不是程序員的作風(fēng)。于是我寫(xiě)了一段代碼,能夠批量移除UTF-8的BOM,其實(shí)質(zhì)就是刪除帶有BOM信息的UTF-8文件的前三字節(jié),代碼共享如下:
[java]?view plaincopy
import?java.io.File;?? import?java.io.IOException;?? import?java.util.Collection;?? import?org.apache.commons.io.DirectoryWalker;?? import?org.apache.commons.io.FileUtils;?? import?org.apache.commons.io.FilenameUtils;?? @SuppressWarnings("rawtypes")?? public?class?Utf8BomRemover?extends?DirectoryWalker?{?? ????public?static?void?main(String[]?args)?throws?IOException?{?? ?????????? ????????new?Utf8BomRemover("java").start(new?File("E:/workspace/Test/src"));?? ????}?? ????private?String?extension?=?null;?? ????public?Utf8BomRemover(String?extension)?{?? ????????super();?? ????????this.extension?=?extension;?? ????}?? ?????? ????@SuppressWarnings("unchecked")?? ????public?void?start(File?rootDir)?throws?IOException?{?? ????????walk(rootDir,?null);?? ????}?? ????protected?void?handleFile(File?file,?int?depth,?Collection?results)?throws?IOException?{?? ????????if?(extension?==?null?? ????????????????||?extension.equalsIgnoreCase(FilenameUtils.getExtension(file.toString())))?{?? ?????????????? ????????????remove(file);?? ????????}?? ????}?? ?????? ????private?void?remove(File?file)?throws?IOException?{?? ????????byte[]?bs?=?FileUtils.readFileToByteArray(file);?? ????????if?(bs[0]?==?-17?&&?bs[1]?==?-69?&&?bs[2]?==?-65)?{?? ????????????byte[]?nbs?=?new?byte[bs.length?-?3];?? ????????????System.arraycopy(bs,?3,?nbs,?0,?nbs.length);?? ????????????FileUtils.writeByteArrayToFile(file,?nbs);?? ????????????System.out.println("Remove?BOM:?"?+?file);?? ????????}?? ????}?? }??
在這個(gè)類中能把指定文件夾中指定后綴名的文件統(tǒng)一去除BOM,而整個(gè)程序源碼中沒(méi)有看到用遞歸算法,而是使用了apache commons-io?,其實(shí)遞歸算法就在DirectoryWalker?類中,實(shí)現(xiàn)者無(wú)需關(guān)心算法,而是關(guān)注于業(yè)務(wù)。同時(shí),這里給一個(gè)提醒,commons-io最新版是2.0,修改了1.4中的一些bug,其中有一處就是DirectoryWalker?類,因此建議使用最新版的commons-io。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)
總結(jié)
以上是生活随笔為你收集整理的移除UTF-8文件头的BOM的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。