zhangskills 发表于 2013-1-17 02:50:43

java整个项目自动编码转换,欢迎使用,哈哈

项目开发中难免出现编码问题,网上查了一个eclipse插件com.lifesting.tool.encoding,不知道什么原因把我项目弄的一片混乱。
 
痛定思痛,自己写了一个,只要在项目中调用并运行一下Transcoding类就可以了,会自动把项目编码转换成指定的编码,同时会备份项目文件
 
自动检测编码用的是网上的BytesEncodingDetect类,觉得检测的准确度还是可以的,欢迎大家测试或使用
 
Transcoding类:
 
public class Transcoding {private BytesEncodingDetect encode = new BytesEncodingDetect();private String projectPath = System.getProperty("user.dir");// 获取项目目录private File tempPath = null;// 转码备份区,用来备份,注意:每次使用前会自动清空private String suf = null;private String newCharset = null;public Transcoding() {// 针对windows目录,linux请自行修改String proPath = projectPath.substring(projectPath.lastIndexOf("\\") + 1);String temp_path = "D:/备份/" + proPath;tempPath = new File(temp_path);// 转码备份区,可自行修改if (!tempPath.exists()) {tempPath.mkdirs();} else {delete(tempPath);// 注意:每次使用前会自动清空}}/** * 把当前项目复制一份到转码备份区 */private void backUp(File srcPath, File dstPath) {if (srcPath.isDirectory()) {if (!dstPath.exists()) {dstPath.mkdirs();}String files[] = srcPath.list();for (int i = 0; i < files.length; i++) {backUp(new File(srcPath, files), new File(dstPath, files));}} else {if (!srcPath.exists()) {System.out.println("File or directory does not exist.");System.exit(0);} else {try {InputStream in = new FileInputStream(srcPath);OutputStream out = new FileOutputStream(dstPath);byte[] b = new byte;int len = 0;while ((len = in.read(b)) != -1) {out.write(b, 0, len);}in.close();out.close();} catch (Exception e) {e.printStackTrace();// 一旦出错,根据信息自己找原因吧System.out.println(srcPath.getAbsolutePath() + " " + dstPath.getAbsolutePath());}}}}/** * 用转码备份区文件转码后覆盖项目 */private void convert(File srcPath, File dstPath) {if (srcPath.isDirectory()) {if (!dstPath.exists()) {dstPath.mkdirs();}String files[] = srcPath.list();for (int i = 0; i < files.length; i++) {convert(new File(srcPath, files), new File(dstPath, files));}} else {if (!srcPath.exists()) {System.out.println("File or directory does not exist.");System.exit(0);} else {//只转码指定后缀的文件if (!srcPath.getName().toLowerCase().endsWith(suf)) {return;}try {// 获取文件编码String charset = BytesEncodingDetect.javaname;//编码相同,无需转码if (charset.equalsIgnoreCase(newCharset)) {return;}InputStream in = new FileInputStream(srcPath);OutputStream out = new FileOutputStream(dstPath, false);BufferedReader br = new BufferedReader(new InputStreamReader(in, charset));BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(out, newCharset));while (br.ready()) {bw.append(br.readLine());bw.newLine();}br.close();bw.close();} catch (Exception e) {e.printStackTrace();System.out.println(srcPath.getAbsolutePath() + " " + dstPath.getAbsolutePath());}}}}/** * 删除目录 */private void delete(File file) {if (file.isDirectory()) {File[] list = file.listFiles();for (File f : list) {delete(f);}file.delete();} else {file.delete();}}/** * 对当前项目进行转码,会把当前项目覆盖 * suf:规定要转码的文件后缀;charset:规定要转的编码 */public void encoding(String suf, String charset) {this.suf = suf;newCharset = charset;backUp(new File(projectPath), tempPath);convert(tempPath, new File(projectPath));System.out.println("encoding successfully!");}/** * @param args */public static void main(String[] args) {new Transcoding().encoding("java", "utf-8");}}
页: [1]
查看完整版本: java整个项目自动编码转换,欢迎使用,哈哈