从网上下载的项目,有时候.java文件的编码是ANSI。导入到自己的MyEclipse后,查看项目源码的时候,总是乱码。

一个个.java去修改的话, 既麻烦又不现实。所以写了下面这个工具类,进行批量转编码。

代码的原理仅仅就是遍历文件,然后使用流,对按照文件的原编码进行读取,用目的编码进行写操作。

直接上源码:

package test;

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; public class Main {
// private String sDirectory = "D:/Workspaces/BeyondDiscuz/src/com";
private String sDirectory = "D:\\Workspaces\\BeyondDiscuz\\src\\com";
private String dDirectory = "D:\\Workspaces\\BeyondDiscuz\\src\\cn"; public static void main(String[] args) {
Main 吗 = new Main();
try {
吗.readerFile(吗.sDirectory);
} catch (IOException e) {
e.printStackTrace();
}
} public void readerFile(String filePath) throws IOException {
if ("".equals(filePath) || null == filePath) {
return;
} File f = new File(filePath);
if (f.isDirectory()) {
String[] child = f.list();
for (int i = 0; i < child.length; i++) {
String path = f.getAbsolutePath() + File.separator;
String newPath = path.replace(this.sDirectory, this.dDirectory);
child[i] = path + child[i];
File c = new File(child[i]);
String newFile = child[i].replace(this.sDirectory, this.dDirectory);
System.out.println("旧路径:" + path);
System.out.println("新路径:" + newPath); File newP = new File(newPath);
if (!newP.exists())
newP.mkdir(); if (c.isFile()) {
System.out.println("旧文件:" + child[i]);
System.out.println("新文件:" + newFile);
// Charset US-ASCII ISO-8859-1 UTF-8 UTF-16BE UTF-16LE UTF-16
BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(c), "GBK"));
// BufferedReader r = new BufferedReader(new InputStreamReader(new FileInputStream(c)));
File newF = new File(newFile);
newF.createNewFile();
// BufferedWriter w = new BufferedWriter(new
// OutputStreamWriter(new FileOutputStream(newF), "UTF-8"));
BufferedWriter w = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(newF)));
// BufferedWriter w = new BufferedWriter(new FileWriter(newFile));
String lineText = null;
while ((lineText = r.readLine()) != null) {
// String temp = new String(lineText.getBytes("ISO-8859-1"), "UTF-8");
w.write(lineText);
w.newLine();
}
w.close();
r.close();
} else {
readerFile(child[i]);
}
}
}
} }

上面自己的写代码只是基本思路,下面是更简洁的代码:

public static void main(String[] args) {
try {
String srcDirPath = "E:\\eclipseWorkspaceSandbase\\test";
// 转为UTF-8编码格式源码路径
String utf8DirPath = "E:\\eclipseWorkspaceSandbase\\test-8"; // 获取所有java文件
Collection<File> javaGbkFileCol = FileUtils.listFiles(new File(srcDirPath), new String[] { "java" }, true); for (File javaGbkFile : javaGbkFileCol) {
System.out.println(javaGbkFile);
// UTF8格式文件路径
String utf8FilePath = utf8DirPath + javaGbkFile.getAbsolutePath().substring(srcDirPath.length());
// 使用GBK读取数据,然后用UTF-8写入数据
FileUtils.writeLines(new File(utf8FilePath), "UTF-8", FileUtils.readLines(javaGbkFile, "GBK"));
}
} catch (Exception e) {
e.printStackTrace();
} }

最新文章

  1. C#开发微信门户及应用(12)-使用语音处理
  2. 一个 -100.01 的double 在内存中怎么存储的. 一个中文String 在内存中占多少直接 utf-8 / GBK
  3. JS左右栏目添加器
  4. OpenFlow.p4 源码
  5. iOS开发——UI篇Swift篇&amp;UISwitch/UIStepper
  6. jquery 动态添加下拉框 需要增加 煊染 selectmenu(&quot;refresh&quot;);
  7. [cocos2d]调用sqlite3数据库
  8. jQuery ajax - serialize() 方法
  9. SVN 服务端 和 客户端
  10. VBS调用windows api函数(postmessage)实现后台发送按键脚本
  11. iOS回顾笔记(07) -- UITableView的使用和性能优化
  12. 简析SNS社交系统&quot;ThinkSNS V4&quot;与&quot;ThinkSNS+&quot;的区别
  13. ES6中6种声明变量的方法
  14. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法
  15. C++版 - 剑指Offer 面试题39:二叉树的深度(高度)(二叉树深度优先遍历dfs的应用) 题解
  16. JS 实现右下角弹窗
  17. Switch 中参数的范围探讨
  18. oracle 视图 参数
  19. RxJava2学习笔记(2)
  20. Spring Java-based容器配置

热门文章

  1. 创建 sequence
  2. matlab解三元二次方程组
  3. aircrack-ng test
  4. centos 创建以日期为名的文件夹
  5. can not import Flask错误
  6. JSON FX
  7. Python in Unity
  8. HighCharts学习笔记(二)HighCharts结构及详细配置
  9. memcache相同主域名下的session共享
  10. [Angularjs]系列——学习与实践