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

Java文本字符集变换实用类

2012-11-05 
Java文本字符集转换实用类eclipe可设置代码文件字符集,比如utf-8。若遇到gbk编码的文件,显示中文时就会乱码

Java文本字符集转换实用类
eclipe可设置代码文件字符集,比如utf-8。若遇到gbk编码的文件,显示中文时就会乱码,此类可以将文件转换成utf-8编码。

import java.io.File;import java.io.FileFilter;import java.io.IOException;import java.util.Arrays;import java.util.List;import org.springframework.util.FileCopyUtils;/** * 文本文件字符编码转换器 */public class CharsetConverter {private String srcDir;private String destDir;private FileFilter filter;/** * 构造器(对所有类型的文件做转换) *  * @param srcDir *            源文件所在目录 * @param destDir *            转换后的文件存放目录 */public CharsetConverter(String srcDir, String destDir) {this(srcDir, destDir, "*");}/** * 构造器 *  * @param srcDir *            源文件所在目录 * @param destDir *            转换后的文件存放目录 * @param fileTypes *            文件类型(根据后缀来判断)类别,逗号(<code>,</code>)分隔。<code>"*" </code>表示所有的类型 */public CharsetConverter(String srcDir, String destDir, String fileTypes) {super();this.srcDir = srcDir;this.destDir = destDir;this.filter = getFileFilter(Arrays.asList(fileTypes.toLowerCase().split(",")));}/** * 取得文件类型过滤器 */private FileFilter getFileFilter(final List<String> fileTypes) {return new FileFilter() {String getType(File file) {String name = file.getName();return name.substring(name.lastIndexOf(".") + 1).toLowerCase();}@Overridepublic boolean accept(File file) {if (file.isHidden())return false;return file.isDirectory() || fileTypes.contains(getType(file))|| fileTypes.contains("*");}};}/** * 执行转换 *  * @param fromCharset *            原文件字符集 * @param toCharset *            转换后的字符集 * @throws IOException */public void convert(String fromCharset, String toCharset)throws IOException {this.convert(new File(srcDir), fromCharset, toCharset);}/** * 转换单个文件 *  * @param fromCharset *            原文件字符集 * @param toCharset *            转换后的字符集 * @throws IOException */private void convert(File file, String fromCharset, String toCharset)throws IOException {if (file.isDirectory()) {for (File f : file.listFiles(this.filter)) {convert(f, fromCharset, toCharset);}return;}System.out.println(file.getAbsolutePath());String to = destDir + "/"+ file.getAbsolutePath().substring(srcDir.length());File dir = new File(to.substring(0, to.replaceAll("\\\", "/").lastIndexOf("/")));if (!dir.exists())dir.mkdirs();byte[] bytes = FileCopyUtils.copyToByteArray(file);FileCopyUtils.copy(new String(bytes, fromCharset).getBytes(toCharset),new File(to));}public static void main(String[] args) throws Exception {if (args.length < 5) {System.out.println("Usage: java CharsetConverter <srcDir> <destDir> <fileTypes|*> <fromCharset> <toCharset>");System.out.println("e.g. java CharsetConverter i:/src i:/dest java,txt gbk utf-8");// System.exit(0);args = new String[] { "i:/src", "i:/dest", "java", "gbk", "utf-8" };}new CharsetConverter(args[0], args[1], args[2]).convert(args[3],args[4]);}}

热点排行