1. 程式人生 > >文件編碼相關的一些工具函數

文件編碼相關的一些工具函數

編碼方式 Coding setname public slab lena cat 相關 package

package com.opslab.util.algorithmImpl;

import com.opslab.util.FileUtil;
import com.opslab.util.CheckUtil;

import java.io.*;
import java.nio.charset.Charset;
import java.nio.charset.UnsupportedCharsetException;
import java.util.List;

/**
* 文件編碼相關的一些工具函數
*/
public class FileEncodingUtil {
/**
* 把指定文件或目錄轉換成指定的編碼
*
* @param fileName 要轉換的文件
* @param fromCharsetName 源文件的編碼
* @param toCharsetName 要轉換的編碼
*/
public static void convert(String fileName, String fromCharsetName, String toCharsetName) {
convert(new File(fileName), fromCharsetName, toCharsetName, null);
}

/**
* 把指定文件或目錄轉換成指定的編碼
*
* @param file 要轉換的文件或目錄
* @param fromCharsetName 源文件的編碼
* @param toCharsetName 要轉換的編碼
*/
public static void convert(File file, String fromCharsetName, String toCharsetName) {
convert(file, fromCharsetName, toCharsetName, null);
}

/**
* 把指定文件或目錄轉換成指定的編碼
*
* @param fileName 要轉換的文件或目錄
* @param fromCharsetName 源文件的編碼
* @param toCharsetName 要轉換的編碼
* @param filter 文件名過濾器
*/
public static void convert(String fileName, String fromCharsetName, String toCharsetName, FilenameFilter filter) {
convert(new File(fileName), fromCharsetName, toCharsetName, filter);
}

/**
* 把指定文件或目錄轉換成指定的編碼
*
* @param file 要轉換的文件或目錄
* @param fromCharsetName 源文件的編碼
* @param toCharsetName 要轉換的編碼
* @param filter 文件名過濾器
*/
public static void convert(File file, String fromCharsetName, String toCharsetName, FilenameFilter filter) {
if (file.isDirectory()) {
List<File> list = CheckUtil.valid(filter) ? FileUtil.listFileFilter(file, filter) :
FileUtil.listFile(file);
if (CheckUtil.valid(list)) {
for (File f : list) {
convert(f, fromCharsetName, toCharsetName, filter);
}
}
} else {
if (filter == null || filter.accept(file.getParentFile(), file.getName())) {
String fileContent = getFileContentFromCharset(file, fromCharsetName);
saveFile2Charset(file, toCharsetName, fileContent);
}
}
}

/**
* 以指定編碼方式讀取文件,返回文件內容
*
* @param file 要轉換的文件
* @param fromCharsetName 源文件的編碼
*/
public static String getFileContentFromCharset(File file, String fromCharsetName) {
String str = "";
if (!Charset.isSupported(fromCharsetName)) {
throw new UnsupportedCharsetException(fromCharsetName);
}
try (InputStream inputStream = new FileInputStream(file);
InputStreamReader reader = new InputStreamReader(inputStream, fromCharsetName)
) {
char[] chs = new char[(int) file.length()];
reader.read(chs);
str = new String(chs).trim();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}

/**
* 以指定編碼方式寫文本文件,存在會覆蓋
*
* @param file 要寫入的文件
* @param toCharsetName 要轉換的編碼
* @param content 文件內容
*/
public static void saveFile2Charset(File file, String toCharsetName, String content) {
if (!Charset.isSupported(toCharsetName)) {
throw new UnsupportedCharsetException(toCharsetName);
}
try (
OutputStream outputStream = new FileOutputStream(file);
OutputStreamWriter outWrite = new OutputStreamWriter(outputStream, toCharsetName)
) {
outWrite.write(content);
} catch (IOException e) {
e.printStackTrace();
}
}
}

文件編碼相關的一些工具函數