底下是一個針對UTF-8編碼的BOMKiller程式~ 如果你開發程式時所採用的文字編輯器會自動為你加上BOM的話~ 那BOMKiller可以協助你更容易刪除這些BOM~
好久沒寫Java了~~ 趁這個機會再回味一下用UltraEdit純手工寫程式~
/**
* Date: 2008-02-18
* Shen (http://blog.ring.idv.tw)
**/
import java.io.*;
import java.nio.channels.*;
public class BOMKiller
{
private String suffix = null;
public BOMKiller(String suffix)
{
this.suffix = suffix;
}
public static void main(String arg[])
{
if(arg.length != 2 || (new File(arg[0])).isDirectory() == false)
{
System.out.println("Usage:java BOMKiller [directory_path] [suffix_name]");
System.exit(0);
}
BOMKiller killer = new BOMKiller(arg[1]);
killer.listFiles(new File(arg[0]));
}
public void listFiles(File f)
{
File[] filelist = f.listFiles(new FileFilter()
{
public boolean accept(File tempf)
{
if(tempf.isDirectory())
{
listFiles(tempf);
return false;
}
return tempf.getName().endsWith(suffix);
}
});
int flength = filelist.length;
for(int i = 0; i < flength ; ++i)
{
killBOM(filelist[i]);
}
}
public void killBOM(File f)
{
try
{
FileInputStream fis = new FileInputStream(f);
if(fis.read() == 0xEF)
{
if(fis.read() == 0xBB)
{
if(fis.read()==0xBF)
{
String path = f.getPath();
System.out.println("BOMKiller:"+path);
File toFile = new File(path+".tmp");
FileChannel fic = fis.getChannel();
FileChannel foc = new FileOutputStream(toFile).getChannel();
fic.transferTo(3, fic.size(),foc);
fic.close();
foc.close();
f.delete();
toFile.renameTo(new File(path));
}
}
}
}catch(Exception e)
{
e.printStackTrace();
}
}
}
用法
Usage:java BOMKiller [directory_path] [suffix_name]
e.g.
java BOMKiller C:\htdocs .php
相關文章