package my.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import org.h2.util.IOUtils; public class GBK2UTF8 { public static void main(String[] args) throws Exception { File from = new File(args[0]); File to = new File(args[1]); if (!to.exists()) to.mkdirs(); listFilesRecursive(from, from, to); } public static void listFilesRecursive(File file, File from, File to) throws Exception { File[] files = file.listFiles(); for (File f : files) { String name = f.getName().toLowerCase(); if (f.isDirectory()) listFilesRecursive(f, from, to); else if (name.endsWith(".java") || name.endsWith(".txt") || name.endsWith(".bat")) { BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(f), "GBK")); String fileName = f.getCanonicalPath().substring(from.getCanonicalPath().length()); f = new File(to.getCanonicalPath(), fileName); if (!f.getParentFile().exists()) f.getParentFile().mkdirs(); System.out.println(f); BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(f), "UTF-8")); IOUtils.copyAndCloseInput(in, out, Integer.MAX_VALUE); IOUtils.closeSilently(in); IOUtils.closeSilently(out); } } } }