底下是一個針對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
相關文章