`
sea0108
  • 浏览: 53049 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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();
			}

			@Override
			public 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]);
	}
}

2
2
分享到:
评论

相关推荐

    Java CTool.java一个好用的字符串操作类.rar

    这个类的功能可实现将数据从数据库中取出后转换、字符编码转换、大文本块处理(将字符集转成ISO)、字符类型转换,比如将String型变量转换成int型变量等操作,在实际应用中,这是个相当实用的字符串操作类。

    java源码包---java 源码 大量 实例

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java源码包4

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    JAVA上百实例源码以及开源项目源代码

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    JAVA上百实例源码以及开源项目

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java源码包3

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    java源码包2

     Java波浪文字,一个利用Java处理字符的实例,可以设置运动方向参数,显示文本的字符数组,高速文本颜色,显示字体的 FontMetrics对象,得到Graphics实例,得到Image实例,填充颜色数组数据,初始化颜色数组。...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    Java2核心技术.part5

    12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带允隔符的输入 12.4.4 StringBuilder类 ...

    Java核心技术II(第8版)

    10.6 文本文件和字符集 10.6.1 源文件的字符编码 10.7 资源包 10.7.1 定位资源包 10.7.2 属性文件 10.7.3 包类 10.8 一个完整的例子 第六章 高级Swing 6.1 列表 6.1.1 JList构件 6.1.2 列表模式 6.1.3 插入和移除值...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java日期选择控件完整源代码 14个目标文件 内容索引:JAVA源码,系统相关,日历,日期选择 Java语言开发的简洁实用的日期选择控件,源码文件功能说明: [DateChooser.java] Java 日期选择控件(主体类) [public] ...

    Java2核心技术.part3

    12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带允隔符的输入 12.4.4 StringBuilder类 ...

    Java2核心技术.part1

    12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带允隔符的输入 12.4.4 StringBuilder类 12.4.5...

    Java2核心技术.part6

    12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带允隔符的输入 12.4.4 StringBuilder类 ...

    Java2核心技术.part4

    12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带允隔符的输入 12.4.4 StringBuilder类 ...

    Java2核心技术.part2

    12.2.5字符集 12.2.6文本输出 12.2.7文本输入 12.3 ZIP文件流 12.4流的使用 12.4.1分隔符输出 12.4.2字符串记号处理器和带分隔符的文本 12.4.3读取带允隔符的输入 12.4.4 StringBuilder类 ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

     《Java开发实战1200例》分为I、II两卷共计1200个例子,包括了开发中各个方面最常用的实例,是目前市场上实例最全面的开发类图书;书中实例来源于多位工程师的多年积累,具有很强的实用性。 本书是第II卷,以开发...

Global site tag (gtag.js) - Google Analytics