首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

资料转码

2012-09-21 
文件转码工程项目太多,各工程或各文件编码不统一时,可运行本工具类,把工作目录下,指定类型的文件,转换成指

文件转码

工程项目太多,各工程或各文件编码不统一时,可运行本工具类,把工作目录下,指定类型的文件,转换成指定的编码格式

?

源码:

import info.monitorenter.cpdetector.io.CodepageDetectorProxy;import info.monitorenter.cpdetector.io.JChardetFacade;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.nio.charset.Charset;import java.util.ArrayList;import java.util.List;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * 文本文件转码 * @author Howard.He */public class TransFileCoding {    private static final Logger logger = LoggerFactory.getLogger(TransFileCoding.class);    public static void main(String[] args) {        String dirPath = "E:/workspace/";        String suffix = ".java";        transformEncoding(dirPath, suffix, "UTF-8");    }    /**     * 文件转码 (文本文件)     *      * @param dirPath     *            工程路径     * @param suffix     *            要转码文件的后缀(.java)     * @param newEncoding     *            转换的编码     */    public static void transformEncoding(String dirPath, String suffix, String newEncoding) {        List<File> list = getFileList(null, dirPath, suffix);        if (null != list && !list.isEmpty()) {            for (File f : list) {                String encoding = getFileCharacterEnding(f);                newEncoding = isEmpty(newEncoding) ? getFileCharacterEnding(f) : newEncoding;                if (!encoding.equals(newEncoding)) {                    StringBuilder content = readContent(f, encoding);                    logger.info("convert file encoding from {} to {}" ,new Object[]{encoding,newEncoding});                    write(f, content, newEncoding);                }                else {                    logger.debug("srcEncoding({})==dstEncoding({}) skipped f: {}", new Object[] { encoding, newEncoding, f.toString() });                }            }        }    }    /**     * 取文件的编码格式     * 异常时默认UTF-8     *      * @param file     * @return     */    @SuppressWarnings("deprecation")    public static String getFileCharacterEnding(File file) {        String fileCharacterEnding = "UTF-8";        CodepageDetectorProxy detector = CodepageDetectorProxy.getInstance();        detector.add(JChardetFacade.getInstance());        try {            Charset charset = detector.detectCodepage(file.toURL());            if (charset != null)                fileCharacterEnding = charset.name();        }        catch (Exception e) {            e.printStackTrace();        }        return fileCharacterEnding;    }    /**     * 获取指定路径下的特定类型的文件集     *      * @param list     * @param dirPath     * @param suffix     * @return     */    public static List<File> getFileList(List<File> list, String dirPath, String suffix) {        File dir = new File(dirPath);        if (dir.exists()) {            File[] files = dir.listFiles();            if (null == list)                list = new ArrayList<File>();            for (File f : files) {                String name = f.getName();                if (f.isDirectory() && !name.equals(".svn"))                    getFileList(list, f.getPath(), suffix);                else if (f.isFile() && name.endsWith(suffix))                    list.add(f);            }        }        return list;    }    public static StringBuilder readContent(File f, String encoding) {        return readContent(f, encoding, "\n");    }    /**     * 读取文件内容     *      * @param f     * @param encoding     * @return     */    public static StringBuilder readContent(File f, String encoding, String enter) {        StringBuilder builder = new StringBuilder();        try {            encoding = encoding == null ? getFileCharacterEnding(f) : encoding;            String data = null;            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(f), encoding));            while ((data = br.readLine()) != null) {                builder.append(isEmpty(enter) ? data : data + enter);            }        }        catch (Exception e) {            e.printStackTrace();        }        return builder;    }    /**     * 写入文件内容     *      * @param f     * @param content     * @param newEncoding     */    private static void write(File f, StringBuilder content, String newEncoding) {        try {            logger.debug("write file:{}",f);            logger.debug(content.toString());            OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(f), newEncoding);            writer.write(content.toString());            writer.close();        }        catch (Exception e) {            e.printStackTrace();        }    }    private static boolean isEmpty(String str) {        return null == str || "".equals(str);    }}

?

取文件编码格式,依赖cpdetector?,可到?http://cpdetector.sourceforge.net/? 下载lib包

使用maven时,直接添加依赖信息:

?

  <dependency>   <groupId>org.mozilla.intl</groupId>   <artifactId>chardet</artifactId>   <version>1.4.2</version>   <scope>test</scope>  </dependency>  <dependency>   <groupId>info.monitorenter</groupId>   <artifactId>cpdetector</artifactId>   <version>1.0.7</version>   <scope>test</scope>  </dependency>

??

热点排行