java实现批量文件编码转换

发布时间 2023-08-31 15:31:25作者: 远山飘来清风
  
  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();
        }

    }