您的位置:首页 > 编程语言 > Java开发

替换Java文件的utf-8 BOM

2011-03-28 14:25 330 查看
eclipse会给utf-8文件加一个3个字节BOM头,大部分文本工具能够正常处理,但是ant等工具无法正常编译代码,下面这段代码用于替换掉utf-8 BOM头:

package org.sl.util;
import java.io.File;
/**
* 用空格替换Java文件utf-8 bom头
* @author shanl
*
*/
public class ReplaceUtf8BOM {
public static void main(String[] args){
if(args.length == 0){
help();
return;
}

if("-d".equalsIgnoreCase(args[0])){
System.out.println("已替换指定目录:'"+args[1]+"'下所有.java文件的utf-8 BOM头");
removeDirectoryUtf8BOM(args[1]);
return;
}

if("-f".equalsIgnoreCase(args[0])){
System.out.println("已替换指定文件:'" + args[1] + "'utf-8 BOM头");
removeFileUtf8BOM(args[1]);
return;
}

System.out.println("错误的参数:" + args[0]);
help();
}

static void help(){
System.out.println("ReplaceUtf8BOM -d <目录名>|-f <文件名>");
System.out.println("-d <目录名>:遍历删除整个目录的.java文件的utf-8 BOM头");
System.out.println("-f <文件名>:删除指定.java文件的utf-8 BOM头");
}

static void removeFileUtf8BOM(String fileStr){
File file = null;

file = new File(fileStr);
removeFileUtf8BOM(file);
}

static void removeFileUtf8BOM(File file){
Utf8BOMHelper.replaceUtf8BOM(file);
}

static void removeDirectoryUtf8BOM(String dirStr){
File dir = null;
File[] files = null;

dir = new File(dirStr);
files = dir.listFiles(new JavaFileFilter());

if(null != files && 0 != files.length){
for(File f:files){

if(f.isDirectory()){
removeDirectoryUtf8BOM(f.getAbsolutePath());
}else{
removeFileUtf8BOM(f);
}
}
}
}
}


package org.sl.util;
import java.io.File;
import java.io.RandomAccessFile;
class Utf8BOMHelper {
/**
* 用空格替换掉指定文件的UTF-8 BOM头(前3个字节)
* @param file
*/
public static void replaceUtf8BOM(File file){
RandomAccessFile accessFile = null;
byte[] utf8Bom = new byte[3];
int readSize = 0;

if(null == file){
return ;
}

try{
accessFile = new RandomAccessFile(file, "rw");
readSize = accessFile.read(utf8Bom);

if(0 >= readSize){
return;
}

if(-17 == utf8Bom[0] && -69 == utf8Bom[1] && -65 ==utf8Bom[2]){

accessFile.seek(0);
accessFile.write(new byte[]{
' ',' ',' '
});
}
}catch(Exception ex){
ex.printStackTrace();
}finally{
try{
if(null != accessFile) accessFile.close();
}catch(Exception ex){

}
}
}
}


package org.sl.util;
import java.io.File;
import java.io.FileFilter;
/**
* 用来过滤非.java文件
* @author kfbsl
*
*/
class JavaFileFilter  implements FileFilter{
//如果文件扩展名为:.java
public boolean accept(File dir, String name) {

if(null == name || "".equals(name)){
return false;
}

return name.toUpperCase().endsWith(".JAVA");
}
public boolean accept(File pathname) {
if(pathname.isDirectory()){
return true;
}

String fileName = pathname.getName();
return accept(null, fileName);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐