生活随笔
收集整理的這篇文章主要介紹了
移除UTF-8文件头的BOM
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
來源:http://blog.csdn.net/inkfish/article/details/6059254
UTF-8 BOM又叫UTF-8 簽名,在UTF-8文件的頭部,長度為3個字節。其實UTF-8 的BOM對UFT-8沒有作用,BOM簽名的意思就是告訴編輯器當前文件采用何種編碼,方便編輯器識別。但是在Eclipse中,帶有BOM的java源碼生成javadoc時卻會出現如下錯誤:
[java]?view plaincopy
E:/workspace/Test/src/express/ExpType.java:1:?非法字符:?/65279?? ?package?express;?? ^??
一個個修改是個辦法,但是面對幾百上幾千個的源文件,一個個去修改決不是程序員的作風。于是我寫了一段代碼,能夠批量移除UTF-8的BOM,其實質就是刪除帶有BOM信息的UTF-8文件的前三字節,代碼共享如下:
[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);?? ????????}?? ????}?? }??
在這個類中能把指定文件夾中指定后綴名的文件統一去除BOM,而整個程序源碼中沒有看到用遞歸算法,而是使用了apache commons-io?,其實遞歸算法就在DirectoryWalker?類中,實現者無需關心算法,而是關注于業務。同時,這里給一個提醒,commons-io最新版是2.0,修改了1.4中的一些bug,其中有一處就是DirectoryWalker?類,因此建議使用最新版的commons-io。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的移除UTF-8文件头的BOM的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。