批量文件编码转换(GBK/UTF-8/UNICODE etc)

批量文件编码转换,JAVA源码:代码中的GBK为文件编码格式,Unicode为目标文件编码格式,根据个人实际情况切换编码。

warn:因为文件是一次性读取全部字符,所以单个文件大小不要太大,否则会内存溢出的。

做好文件备份。

因为eclipse或者其它IDE里的代码只能编辑当前工程目录下的文件夹或者文件,对于不属于workspace的File是没有权限写入的,we‘d better 把需要转码的文件夹放在工程目录下进行转换。’


import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.nio.charset.Charset;

public class C {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		File file=new File("E:\\workspace\\AA\\src\\src");
		try {
			transfer2Unicode(file);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//E:\mobileBeta\com.agree.abt.mob\platforms\android\src\cn\com\agree\amate
//		File file=new File("E:\\workspace\\AA\\src\\src\\android\\src\\cn\\com\\agree\\amate\\AMate.java");
//		InputStreamReader isr=new InputStreamReader(new FileInputStream(file), Charset.forName("unicode"));
//		char[] chars=new char[1];
//		while(isr.read(chars)!=-1){
//			System.out.print(chars[0]);
//		}
//		String unicode="阿萨德发生";
//		byte[] utf=unicode.getBytes(Charset.forName("UTF-8"));
//		System.out.println(new String(utf,Charset.forName("UTF-8")));
//		System.out.println(new String(unicode.getBytes(Charset.forName("unicode")),Charset.forName("unicode")));
//		File file=new File("E:\\workspace\\AA\\src\\src/unicode");
//		OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream(file), Charset.forName("unicode"));
//		osw.write(new String(unicode.getBytes(Charset.forName("unicode")),Charset.forName("unicode")).toCharArray());
//		osw.flush();
//		osw.close();
//		File[] files=file.listFiles();
//		for(File everyFile:files){
//			if(everyFile.isFile()){
//				InputStreamReader isr=new InputStreamReader(new FileInputStream(everyFile), Charset.forName("GBK"));
//				StringBuffer sb=new StringBuffer();
//				char[] chars=new char[1];
//				while(isr.read(chars)!=-1){
//					sb.append(chars);
//				}
//				String str=new String(sb.toString().getBytes(Charset.forName("GBK")));
//				String unicode=new String(str.getBytes(Charset.forName("unicode")),Charset.forName("unicode"));
//				System.out.print(unicode);
//				
//			}
//		}
	}
	public static void transfer2Unicode(File file) throws IOException{
		if(file.exists()){
			if(file.isDirectory()){
				File[] files=file.listFiles();
				for(File unit:files){
					transfer2Unicode(unit);
				}
			}else{
				InputStreamReader isr=new InputStreamReader(new FileInputStream(file), Charset.forName("GBK"));
				StringBuffer sb=new StringBuffer("");
				char[] chars=new char[1];
				while(isr.read(chars)!=-1){
					sb.append(chars);
				}
				String str=new String(sb.toString().getBytes(Charset.forName("GBK")));
				String unicode=new String(str.getBytes(Charset.forName("unicode")),Charset.forName("unicode"));
//				File unicodeFile=new File(file.getAbsolutePath().substring(0, file.getAbsolutePath().lastIndexOf("\\")-1)+"/"+file.getName());
				OutputStreamWriter osw=new OutputStreamWriter(new FileOutputStream(file),Charset.forName("unicode"));
				System.out.println(unicode.toString());
				osw.write(unicode.toCharArray());
				osw.flush();
				osw.close();
				isr.close();
				}
		} 
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值