java实现批量文件编码转换

_TYRO- / 2023-08-31 / 原文

public final static String SLANT_LINE="/";

/**
 * @param sourcePath 源文件路径
 * @param targetPath 目标文件路径
 * @param sourceEncoding 源文件编码
 * @param targetEncoding 目标文件编码
 * @throws IOException
 */
public static void fileEncodingSwitch(String sourcePath,String targetPath,String sourceEncoding,String targetEncoding) throws IOException {

    File sourceFile=new File(sourcePath);
    File targetFile=new File(targetPath);
    //源文件不存在返回
    if(!sourceFile.exists()) return;
    //目标文件存在先删除
    if(targetFile.exists()) targetFile.delete();


    if(sourceFile.isDirectory()){
        //创建新的目标目录
        targetFile.mkdir();
        File[] childFiles=sourceFile.listFiles();
        for(File childFile:childFiles){
            String newSourcePath=sourcePath+SLANT_LINE+childFile.getName();
            String newTargetPath=targetPath+SLANT_LINE+childFile.getName();
            fileEncodingSwitch(newSourcePath,newTargetPath,sourceEncoding,targetEncoding);
        }
    }else{
        //创建新的目标文件
        targetFile.createNewFile();
        FileInputStream fileInputStream=new FileInputStream(sourceFile);
        InputStreamReader inputStreamReader=new InputStreamReader(fileInputStream,sourceEncoding);

        FileOutputStream fileOutputStream=new FileOutputStream(targetFile);
        OutputStreamWriter outputStreamWriter=new OutputStreamWriter(fileOutputStream,targetEncoding);

        int len;
        while ((len=inputStreamReader.read())!=-1){
            outputStreamWriter.write(len);
        }

        inputStreamReader.close();
        outputStreamWriter.close();
        fileInputStream.close();
        fileOutputStream.close();
    }

}