gbk文件==>utf-8 小工具

在用eclipse引入工程的时候,引入张孝祥老师java高级特性的代码,.java文件格式是ANSI格式的, 包含中文,如果把这些代码

引入到工程里面,工程编码格式是utf-8,会出现乱码,所以在引入之前,先将所有的ANSI的文件,改成UTF-8编码格式
于是写了一个工具类,将工程源代码路径给程序代码,该工具类会生成UTF-8文件编码格式的文件,存放到目的路径。

注意:该工具类主要目的是改变.java文件的编码,如果不是文本文件,比如jar文件等,转换后的文件将有问题,建议jar文件直接从源码中拷贝

package net.dhh.util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
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;

/**
 * 编码转换器
 * 问题描述:
 * 在用eclipse引入工程的时候,引入张孝祥老师java高级特性的代码,文件格式是ANSI格式的, 包含中文,如果把这些代码
 * 引入到工程里面,工程编码格式是utf-8,会出现乱码,所以在引入之前,先将所有的ANSI的文件,改成UTF-8编码格式
 * 于是写了一个工具类,将工程源代码路径给程序代码,该工具类会生成UTF-8文件编码格式的文件,存放到目的路径
 * @author dhh
 *
 */
public class CodingConvertUtil {
	public static void main(String[] args) {
		String srcDir = "G:\\2_Java高级特性\\java 深入教程 -张孝祥\\张孝祥Java高新技术_73_源代码\\javaenhance";   //工程源代码
		String destDir = "D:/desc";   //转换编码格式后的存放目录,该目录可以不存在
		createNewFile(srcDir, destDir);
		System.out.println("转换文件编码成功!!");
	}
	
	
	
	/**
	 * 生成新的文件夹
	 * @param srcDir 源目录,一定是文件夹,不能这个工具类就没意义了,单个文件,直接另存为就完事了
	 * @param destDir 目的目录
	 */
	public static void createNewFile(String srcDir, String destDir){
		File srcFile = new File(srcDir);
		if(srcFile.isDirectory()){
			String name = srcFile.getName();
			File directory = new File(destDir+"/" + name);
			directory.mkdirs();
			
			File[] files = srcFile.listFiles();
			if(files!=null && files.length>0){
				for(File f : files){
					createNewFile(f.getAbsolutePath(), directory.getAbsolutePath());
				}
			}
		}else if(srcFile.isFile()){
			String filename = srcFile.getName();
			if(filename!=null && !filename.equals("")){
				if(filename.endsWith(".java")){   //如果是java文件
					//改文件的编码
					covert(srcFile, new File(destDir + "/" + filename));
				}else{
					//其他编码,直接原样保存
					saveDirectly(srcFile, new File(destDir + "/" + filename));
				}
			}
		}else{
			System.out.println("不是正确的目录");
		}
	}
	
	/**
	 * 文件编码格式转换,转成UTF-8格式文件
	 * @param srcDir 
	 * @param destDir 
	 */
	private static String covert(File srcFile ,File destFile) {
		BufferedReader reader = null;
		BufferedWriter writer = null;//定义一个流
		try {
			InputStreamReader isr  = new InputStreamReader(new FileInputStream(srcFile), Charset.forName("GBK"));
			reader = new BufferedReader(isr);   //此时获取到的reader就是整个文件的缓存流
			FileOutputStream fos = new FileOutputStream(destFile);
			writer = new BufferedWriter(new OutputStreamWriter(fos, Charset.forName("UTF-8")));
			
			String str = "";
			while ((str = reader.readLine())!= null){ // 判断最后一行不存在,为空结束循环
				writer.write(str + "\r\n");
			};
			System.out.println("创建UTF-8格式文件:" + destFile.getName());
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try {
				if(writer!=null) writer.close();
				if(reader!=null) reader.close();
			} catch (Exception e2) {
			}
		}
		return null;
	}
	
	/**
	 * 针对不是.java结尾的文件,直接在目的目录保存文件
	 * @param srcFile
	 * @param destFile
	 * @return
	 */
	private static String saveDirectly(File srcFile ,File destFile) {
		BufferedReader reader = null;
		BufferedWriter writer = null;//定义一个流
		try {
			InputStreamReader isr  = new InputStreamReader(new FileInputStream(srcFile));
			reader = new BufferedReader(isr);   //此时获取到的reader就是整个文件的缓存流
			FileOutputStream fos = new FileOutputStream(destFile);
			writer = new BufferedWriter(new OutputStreamWriter(fos));
			
			String str = "";
			while ((str = reader.readLine())!= null){ // 判断最后一行不存在,为空结束循环
				writer.write(str + "\r\n");
			};
		}catch(Exception e){
			e.printStackTrace();
		}finally{
			try {
				if(writer!=null) writer.close();
				if(reader!=null) reader.close();
			} catch (Exception e2) {
			}
		}
		return null;
	}
	
}


你可能感兴趣的:(Java工具类)