`
sea0108
  • 浏览: 54777 次
  • 性别: 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 转换字符编码工具

    这个类可能包含了检测输入数据的原始编码、验证转换过程中的字符集兼容性,或者在转换过程中防止乱码的出现等功能。 在实际应用中,字符编码问题可能导致乱码、数据丢失或者无法正确解析的问题。例如,从GBK编码的...

    java 写的字符编码转换工具(附带源码)

    1. **Charset类**:Java的`java.nio.charset`包中的`Charset`类是字符编码的核心类,它可以用于获取所有可用的字符集,并进行字符编码和解码操作。例如,`Charset.forName("UTF-8")`可以获取UTF-8编码。 2. **...

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

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

    java_各种编码转换源代码

    5. `StandardCharsets`枚举:Java 7引入了`java.nio.charset.StandardCharsets`枚举,包含了常见的字符集常量,如`StandardCharsets.UTF_8`,这样可以更安全地使用字符集,避免因拼写错误引发的问题。 在`Code...

    java实现字符串处理组件-源代码

    这个组件可能包含了将字符串从一种字符集(如UTF-8)转换为另一种字符集(如GBK)的功能,这对于处理不同地区或系统间的编码问题非常有用。 2. **取子字符串**: Java的`String`类提供了`substring()`方法来获取...

    Java软件 简繁转换易jar程式嵌入工具

    这个工具可能使用了一些开源的中文字符集转换库,如OpenCC,这是一个广泛使用的简繁转换库,提供了多种转换规则,包括“常用词简繁转换”、“全形半形转换”等,以满足不同的转换需求。使用这样的库可以确保转换的...

    文本大写小写双向转换工具

    在英文字符集(如ASCII或Unicode)中,每个字母有两个形式:大写和小写。大写字母通常用于标题、缩略词或表示专有名词,而小写字母则常用于一般书写和单词拼写。在计算机程序中,区分大小写是至关重要的,因为"Hello...

    Ascii码转换器(java环境用的)

    为了处理这种情况,我们需要对文件进行编码检测,然后使用适当的编码进行读写,如使用`Charset`类进行字符集的识别和转换。 此外,对于批量处理大量文件的场景,可以编写Java程序实现自动化转换,利用Java强大的...

    java2实用教程

    《java2实用教程》涵盖了Java语言的基础知识和一些高级特性,适合初学者系统学习Java编程。以下是书中各章节的知识点总结: 第一章:JAVA语言入门 1.1 JAVA的诞生:介绍了Java语言的历史背景,它是由Sun ...

    Java2实用教程电子教案.pdf

    ### Java2实用教程知识点概述 #### 一、Java语言入门 **1.1 Java的诞生** - **背景**: Java 语言是由 Sun Microsystems 公司在 1995 年发布的,由 James Gosling 主导设计。 - **目的**: 设计之初是为了用于消费...

    java常用字符串方法网络收集txt版

    - `getBytes(Charset charset)`: 指定字符集获取字节数组。 17. **字符串反转** - `reverse()`: 反转字符串中的字符顺序。 18. **国际化与本地化** - `format(Locale locale, String format, Object... args)`:...

    Android简体/繁体字符相互转换

    在Android中实现字符转换,通常会利用到Java或Kotlin中的Unicode字符集和转换库。Unicode是一个包含所有已知字符的编码标准,包含了简体和繁体中文的所有字符。通过查找特定的Unicode码点,我们可以实现字符间的转换...

    Java Emoji转换工具.zip

    Java Emoji转换工具是一种基于Java编程语言的实用程序,主要用于处理文本中的表情符号(Emoji),将它们转换成适合不同平台或环境的格式。在现代通信中,Emoji已经成为表达情感和简化交流的重要元素,但不同的操作...

    java实用教程

    ### Java实用教程知识点详解 #### 第一章:Java语言入门 **1.1 Java的诞生** - **背景介绍**:Java是由Sun Microsystems公司于1995年推出的面向对象编程语言。 - **目的**:旨在解决C++语言中存在的问题,如内存...

    java_code_for_common_functions.rar_JSON_java json_jquery_数据库 转换

    例如,`convertEncoding()`函数可能使用`Charset`类进行字符集转换,`unescapeHTML()`可能使用`StringEscapeUtils`进行HTML实体解码。 4. **JSON处理**: JSON(JavaScript Object Notation)是一种轻量级的数据...

    JAVA使用itextpdf实现HTML转PDF

    iTextPDF提供了`HtmlConverter`类,可以方便地将HTML字符串或URL转换为PDF。以下是一个简单的示例: ```java import com.itextpdf.html2pdf.HtmlConverter; import com.itextpdf.html2pdf.attach.ProcessorContext;...

    文件内容替换与文件编码格式转换java源码

    Java语言提供了强大的I/O和字符集操作功能,可以方便地处理文件编码转换。主要涉及的类有`java.io.File`、`java.nio.file.Files`、`java.nio.charset.Charset`等。以下是一些关键步骤: 1. **读取文件**:使用`...

    文件编码格式批量转换工具.rar

    本文将深入探讨“文件编码格式批量转换工具”,重点讲解如何将文件从一种编码格式转换为UTF-8编码,以及涉及的字符集和Java编程语言的相关知识。 标题“文件编码格式批量转换工具.rar”表明这是一个可以处理多个...

    简体转繁体java

    此外,Java还有第三方库,如ICU4J,提供了更强大的字符集转换功能,可以处理更多复杂的转换需求,例如全角半角转换、简体繁体混合文本的处理等。 标签中的“源码”意味着这个项目可能包含了实现上述功能的Java源...

Global site tag (gtag.js) - Google Analytics