批量处理AS文件编码问题

来源:互联网 发布:mongodb 数据导出 编辑:程序博客网 时间:2024/05/22 06:52

当我们在AndroidStudio导入一个Module的时候,有可能会遇到文件编码问题,报一大堆错误如下所示:

Error:(23, 48) 閿欒: 缂栫爜UTF-8鐨勪笉鍙槧灏勫瓧绗?
Error:(23, 49) 閿欒: 缂栫爜UTF-8鐨勪笉鍙槧灏勫瓧绗?
Error:(23, 50) 閿欒: 缂栫爜UTF-8鐨勪笉鍙槧灏勫瓧绗?
Error:(23, 51) 閿欒: 缂栫爜UTF-8鐨勪笉鍙槧灏勫瓧绗?

主要是由于原Module项目是在GBK环境下开发,导入As时采用的是UTF-8所以遇到有中文的java文件会报此错误,虽然不影响编译,但是每次看着一大堆红也不舒服,所以把文件编码转为UTF-8势在必得,但是一个一个手动转费时又费神,所以便有了这篇文章。

以下代码很简单,直接输入一个路径就可以实现编码转换,直接在java工程里Run一下即可:

public class PoJie {private static String path = "C:/Users/dell1/android-studio/workspace/NetKnight-master/app/src/main/java/com/pencilbox/netknight/service";public static void main(String[] args) {changeFormat(path);System.out.println("---转换结束---");}public static void changeFormat(String strPath) {File[] files = new File(strPath).listFiles(); // 该文件目录下文件全部放入数组if (files != null) {for (int i = 0; i < files.length; i++) {String fileName = files[i].getName();if (files[i].isDirectory()) { // 判断是文件还是文件夹if(!fileName.equalsIgnoreCase("build")&&!fileName.contains("."))changeFormat(files[i].getAbsolutePath()); // 获取文件绝对路径} else if (fileName.endsWith("java")) { process(files[i],".java");}}}}private static void process(File file,String suffix){String strFileName = file.getAbsolutePath();System.out.println("---" + strFileName);String content = readTxtFile(file, "gbk");File txtFile = new File(strFileName.substring(0,strFileName.indexOf(".")) + ".txt");writeTxtFile(content, txtFile, "utf-8");file.delete();strFileName = txtFile.getAbsolutePath();txtFile.renameTo(new File(strFileName.substring(0,strFileName.lastIndexOf(".")) + suffix));}public static String readTxtFile(File file, String format) {String result = "";try {BufferedReader bufReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), format));String read = "";while ((read = bufReader.readLine()) != null) {result = result + read + "\r\n";}bufReader.close();} catch (Exception e) {e.printStackTrace();}return result;}public static boolean writeTxtFile(String content, File fileName,String format) {RandomAccessFile mm = null;boolean flag = false;FileOutputStream o = null;try {o = new FileOutputStream(fileName);o.write(content.getBytes(format));o.close();flag = true;} catch (Exception e) {e.printStackTrace();} finally {try {if (mm != null) {mm.close();}} catch (Exception e) {e.printStackTrace();}}return flag;}}
转换结束后,所有GBK文件已经转为UTF-8,并且中文也不会乱码了。