EncoderConvert.java
- package edu.jiangxin.apktoolbox.file.core;
- 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 java.util.Collection;
- import java.util.Iterator;
- import org.apache.commons.io.FileUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.logging.log4j.LogManager;
- import org.apache.logging.log4j.Logger;
- /**
- * 文件编码转换的工具类.
- *
- * @author jiangxin
- * @author 2018-09-09
- *
- */
- public class EncoderConvert {
- private static final String TMP_SUFFIX = ".temp";
- private static final Logger logger = LogManager.getLogger(EncoderDetector.class.getSimpleName());
- /**
- * 实现对文件的编码转换.
- *
- * @param srcFileString 源文件文件名
- * @param srcEncoder 源文件编码
- * @param desFileString 目的文件文件名
- * @param desEncoder 需要转换的编码
- */
- public static void encodeFile(String srcFileString, String srcEncoder, String desFileString, String desEncoder) {
- if (srcFileString.equals(desFileString)) {
- srcFileString = srcFileString + EncoderConvert.TMP_SUFFIX;
- FileProcess.copyFile(desFileString, srcFileString);
- }
- File srcFileFile = new File(srcFileString);
- File desFileFile = new File(desFileString);
- File parentDir = desFileFile.getParentFile();
- if (!parentDir.exists()) {
- boolean success = parentDir.mkdirs();
- if (!success) {
- logger.error("delete srcFileFile failed");
- return;
- }
- }
- try (BufferedReader reader = new BufferedReader(
- new InputStreamReader(new FileInputStream(srcFileFile), srcEncoder));
- BufferedWriter writer = new BufferedWriter(
- new OutputStreamWriter(new FileOutputStream(desFileFile), desEncoder))) {
- int ch = 0;
- while ((ch = reader.read()) != -1) {
- writer.write(ch);
- }
- } catch (Exception e) {
- logger.error("Exception", e);
- return;
- }
- if (srcFileString.equals(desFileString + EncoderConvert.TMP_SUFFIX)) {
- boolean success = srcFileFile.delete();
- if (!success) {
- logger.error("delete srcFileFile failed");
- }
- }
- }
- /**
- * 实现文件的编码转换. see {@link #encodeFile(String, String, String, String)}
- *
- * @param fileString 文件名
- * @param srcEncoder 原始编码
- * @param desEncoder 需要转换的编码
- */
- public static void encodeFile(String fileString, String srcEncoder, String desEncoder) {
- encodeFile(fileString, srcEncoder, fileString, desEncoder);
- }
- /**
- * 实现文件夹中特定文件的批量编码转换. see {@link #encodeFile(String, String, String, String)}
- *
- * @param srcDirString 原始文件夹
- * @param srcEncoder 原始编码
- * @param desDirString 目的文件夹
- * @param desEncoder 需要转换的编码
- * @param suffix 指定需要转换的后缀
- */
- public static void encodeDir(String srcDirString, String srcEncoder, String desDirString, String desEncoder,
- String suffix) {
- // File srcDirFile = new File(srcDirString);
- File desDirFile = new File(desDirString);
- // 获取所有符合条件的文件
- String[] extensions = null;
- if (StringUtils.isNotEmpty(suffix)) {
- extensions = suffix.split(",");
- }
- Collection<File> files = FileUtils.listFiles(new File(srcDirString), extensions, true);
- Iterator<File> it = files.iterator();
- while (it.hasNext()) {
- File tempFile = it.next();
- String desFileString = desDirFile.getAbsolutePath() + File.separator + tempFile.getName();
- String srcFileString = tempFile.getAbsolutePath();
- encodeFile(srcFileString, srcEncoder, desFileString, desEncoder);
- }
- }
- /**
- * 实现文件夹中特定文件的批量编码转换. see {@link #encodeFile(String, String, String, String)}
- *
- * @param srcDirString 原始文件夹
- * @param srcEncoder 原始编码
- * @param desDirString 目的文件夹
- * @param desEncoder 需要转换的编码
- */
- public static void encodeDir(String srcDirString, String srcEncoder, String desDirString, String desEncoder) {
- encodeDir(srcDirString, srcEncoder, desDirString, desEncoder, null);
- }
- }