裝載cygwin可以打成tar 包。然後如果檔案有問題
Java用
iconv -f GBK -t utf-8 2010-10-30.txt –o 2010-10-30.txt
c用
iconv -f GBK -t utf-8 2010-10-30.txt > 2010-10-30.txt
如果檔案有多個問題 可以用遞迴實現
具體如下:
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import java.util.regex.Pattern;
public class ChangeFile4ZH {
private static int total=0;
public static void main(String args[]){
System.out.println("請輸入聊天根資料夾:");
Scanner sc = new Scanner(System.in);
String filePath = sc.nextLine();
if(filePath!=null && filePath.length()>0){
changeFileName(filePath);
}
}
public static void changeFileName(String filePath){
if(total %50==0){System.out.println("total:"+total);}
File file= new File(filePath);
if(file.exists()){
File[] filesList = file.listFiles();
for (File f : filesList) {
if(f.isFile()){
//重新命名檔案
renameFile( f.getAbsolutePath(),f.getParent() , f.getName());
total++;
}else{
changeFileName(f.getAbsolutePath());
}
}
}
}
public static void encode(String filePath){
if(total %50==0){System.out.println("total:"+total);}
File file= new File(filePath);
if(file.exists()){
File[] filesList = file.listFiles();
for (File f : filesList) {
if(f.isFile()){
//重編譯檔案內容
enConderFile(f);
total++;
}else{
encode(f.getAbsolutePath());
}
}
}
}
public static void delete(String filePath){
if(total %50==0){System.out.println("total:"+total);}
File file= new File(filePath);
if(file.exists()){
File[] filesList = file.listFiles();
for (File f : filesList) {
if(f.isFile()){
//刪除原來檔案
deleteFile(f.getAbsolutePath() ,f.getName());
total++;
}else{
delete(f.getAbsolutePath());
}
}
}
}
public static void enConderFile(File file){
Runtime runTime=Runtime.getRuntime();
try {
runTime.exec("iconv -f gbk -t utf-8 "+file.getPath() +" -o " +file.getParent()+File.separator+"bak"+file.getName());
} catch (Exception e) {
System.out.println("iconv -f gbk -t utf-8 "+file.getPath() +" -o " +file.getParent()+File.separator+"bak"+file.getName());
}
}
public static void renameFile(String realPath,String path,String fileName){
if(fileName.startsWith("bak")){
Runtime runTime=Runtime.getRuntime();
try {
runTime.exec(" mv "+realPath +" "+path+File.separator+ fileName.replaceFirst("bak",""));
} catch (IOException e) {
System.out.println(" mv "+realPath +" "+path+File.separator+ fileName.replaceFirst("bak",""));
}
}
}
//刪除檔案
public static void deleteFile(String realPath,String fileName){
String regPath = "^[//d]{4}-[//d]{2}-[//d]{2}.txt$";
Pattern pa=Pattern.compile(regPath);
if(pa.matcher(fileName).find()){
new File(realPath).delete();
}
}
}