文件,文件夹编码转换

来源:互联网 发布:算法导论要学吗 编辑:程序博客网 时间:2024/05/21 11:31

乱码问题:


编码:字符—>字节          解码:字节->字符

编码、解码字符集不同,导致了乱码;

编码一般用于保存文件,一旦出错基本没救,但是基本不会发生,磁盘一般不允许存保存乱码的文件

解码问题比较好解决,先将解码的字符集还原回去,然后在用正确的字符集解码





以前做项目开发都是gbk编码,最近出来工作普遍都是utf-8,遇到了编码转换问题。。。


记得以前做写了一个转换代码,现在要用,硬是找不到了,坑了自己。

import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;/************************************************ * @版权: Copyright (c) 1998-2015 *********公司技术开发部 * @创建人版本: 刘洋 E-mail:465282857@qq.com * @版本: 1.0 * @创建日期: 2015-9-3 下午3:51:36 * @类描述: 编码转换类 *  * @修改记录: * @版本: ***********************************************/public class Translate{public static void main(String[] args) throws IOException{// srcString src = "C:\\Users\\nb\\Desktop\\src";String srcCoding = "gbk";// destString dest = "C:\\Users\\nb\\Desktop\\src_u";String destCoding = "utf-8";copyDirectiory(src, dest, srcCoding, destCoding);System.out.println("done!");}/** * 单纯 复制文件 *  * @param sourceFile * @param targetFile * @throws IOException */public static void copyFile(File sourceFile, File targetFile)throws IOException{BufferedInputStream inBuff = null;BufferedOutputStream outBuff = null;try{// 新建文件输入流并对它进行缓冲inBuff = new BufferedInputStream(new FileInputStream(sourceFile));// 新建文件输出流并对它进行缓冲outBuff = new BufferedOutputStream(new FileOutputStream(targetFile));// 缓冲数组byte[] b = new byte[1024 * 5];int len;while ((len = inBuff.read(b)) != -1){outBuff.write(b, 0, len);}// 刷新此缓冲的输出流outBuff.flush();} finally{// 关闭流if (inBuff != null)inBuff.close();if (outBuff != null)outBuff.close();}}/** * code 复制文件夹 *  * @param sourceDir * @param targetDir * @throws IOException */public static void copyDirectiory(String sourceDir, String targetDir,String srcCoding, String destCoding) throws IOException{// 新建目标目录(new File(targetDir)).mkdirs();// 获取源文件夹当前下的文件或目录File[] file = (new File(sourceDir)).listFiles();for (int i = 0; i < file.length; i++){if (file[i].isFile()){// 源文件File sourceFile = file[i];// 目标文件File targetFile = new File(new File(targetDir).getAbsolutePath() + File.separator+ file[i].getName());copyFile(sourceFile, targetFile, srcCoding, destCoding); //}if (file[i].isDirectory()){// 准备复制的源文件夹String dir1 = sourceDir + "/" + file[i].getName();// 准备复制的目标文件夹String dir2 = targetDir + "/" + file[i].getName();copyDirectiory(dir1, dir2, srcCoding, destCoding);}}}/** * code 复制文件 *  * @param srcFileName * @param destFileName * @param srcCoding * @param destCoding * @throws IOException */public static void copyFile(File srcFileName, File destFileName,String srcCoding, String destCoding) throws IOException{// 把文件转换为GBK文件BufferedReader br = null;BufferedWriter bw = null;try{InputStreamReader inputStreamReader = new InputStreamReader(new FileInputStream(srcFileName), srcCoding);OutputStreamWriter outputStreamWriter = new OutputStreamWriter(new FileOutputStream(destFileName), destCoding);br = new BufferedReader(inputStreamReader);bw = new BufferedWriter(outputStreamWriter);char[] b = new char[1024 * 5];int len;while ((len = br.read(b)) != -1){bw.write(b, 0, len);}} finally{if (br != null)br.close();if (bw != null)bw.close();}}/** * 删除文件 *  * @param filepath * @throws IOException */public static void del(String filepath) throws IOException{File f = new File(filepath);// 定义文件路径if (f.exists() && f.isDirectory()){// 判断是文件还是目录if (f.listFiles().length == 0){// 若目录下没有文件则直接删除f.delete();} else{// 若有则把文件放进数组,并判断是否有下级目录File delFile[] = f.listFiles();int i = f.listFiles().length;for (int j = 0; j < i; j++){if (delFile[j].isDirectory()){del(delFile[j].getAbsolutePath());// 递归调用del方法并取得子目录路径}delFile[j].delete();// 删除文件}}}}}
有什么bug,疑问可以留言或加qq,,,必及时回复

0 0
原创粉丝点击