开发者社区> 激酶> 正文

移除UTF-8文件头的BOM

简介:
+关注继续查看

  inkfish原创,请勿商业性质转载,转载请注明来源(http://blog.csdn.net/inkfish )。(来源:http://blog.csdn.net/inkfish)

  UTF-8 BOM又叫UTF-8 签名,在UTF-8文件的头部,长度为3个字节。其实UTF-8 的BOM对UFT-8没有作用,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别。但是在Eclipse中,带有BOM的java源码生成javadoc时却会出现如下错误:(来源:http://blog.csdn.net/inkfish)

E:/workspace/Test/src/express/ExpType.java:1: 非法字符: /65279 ?package express; ^

  一个个修改是个办法,但是面对几百上几千个的源文件,一个个去修改决不是程序员的作风。于是我写了一段代码,能够批量移除UTF-8的BOM,其实质就是删除带有BOM信息的UTF-8文件的前三字节,代码共享如下:(来源:http://blog.csdn.net/inkfish)

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 { //删除指定文件夹下(含子文件夹)所有java文件的BOM,若构造器中参数为null则删除所有文件头部BOM 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()))) { //调用具体业务逻辑,其实这里不仅可以实现删除BOM,还可以做很多想干的事情。 remove(file); } } /** 移除UTF-8的BOM */ 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。(来源:http://blog.csdn.net/inkfish)

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
文件bom头,文件bom头保存的什么东西,php读取bom头数据
文件bom头,文件bom头保存的什么东西,php读取bom头数据
19 0
[java]处理utf-8 bom字符串的bom头
char[] bomChar = "带bom的字符串".toCharArray();//转为char数组 char[] noneBomchar = new char[bomChar.
2377 0
去掉Bom头的方法和为什么要清除Bom头
什么是bom头? 在utf-8编码文件中BOM在文件头部,占用三个字节,用来标示该文件属于utf-8编码,现在已经有很多软件识别bom头,但是还有些不能识别bom头,比如PHP就不能识别bom头,这也是用记事本编辑utf-8编码后执行就会出错的原因了。 去掉bom头的办法,简单的是下面两种: 1、editplus去BOM头的方法   编辑器调整为UTF8编码格
2432 0
Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50
Linux下查找包含BOM头的文件和清除BOM头命令 2014-08-16 12:30:50 分类: 系统运维   查找包含BOM头的文件,命令如下: 点击(此处)折叠或打开 grep -r -I -l $'^\xEF\xBB\xBF' ./ \xef\xbb\xbf是UTF8 BOM的16进制表示   这个命令会把当前目录及所有子目录下的BOM头删除掉。
1117 0
批量清除BOM头
批量清除BOM头  (2012-03-05 13:28:30) 转载▼ 标签:  杂谈   有些php文件由于不小心保存成了含bom头的格式而导致出现一系列的问题。以下是批量清除bom头的代码,复制代码,保存成.php文件,放在想执行的文件夹,运行就可以了
721 0
+关注
激酶
阿里云事业群技术专家,9年企业级软件开发经验,3年互联网软件开发经验。全栈工程师,生物专业出身,测试、数据处理、应用开发、前端、架构均有涉猎。更是一名马拉松及手工制作的爱好者。
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载