使用java进行文件编码转换
生活随笔
收集整理的這篇文章主要介紹了
使用java进行文件编码转换
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
在開發(fā)過程中,可能會遇到文件編碼的轉(zhuǎn)換,盡管說開發(fā)工具eclipse能夠轉(zhuǎn)換編碼,可是有的情況卻非常不方便。比方,原來文件本身的編碼是GBK,如今要轉(zhuǎn)換成UTF-8,假設(shè)直接在eclipse中把文件編碼改動成UTF-8,恭喜你,是亂碼,由于不能直接從GBK到UTF-8進(jìn)行轉(zhuǎn)換,這時就須要我們手動的來轉(zhuǎn)換編碼。以下是一個文件編碼轉(zhuǎn)換的工具類。
package com.mikan.stuff;import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.nio.charset.Charset; import java.nio.charset.UnsupportedCharsetException;public class FileCharsetConverter {public static void main(String[] args) throws Exception {convert("D:\\stuff\\src\\main\\java\\com\\mikan\\stuff\\test.txt","GBK", "UTF-8", new FilenameFilter() {@Overridepublic boolean accept(File dir, String name) {return name.endsWith("txt");}});}/*** 把指定文件或文件夾轉(zhuǎn)換成指定的編碼* * @param fileName* 要轉(zhuǎn)換的文件* @param fromCharsetName* 源文件的編碼* @param toCharsetName* 要轉(zhuǎn)換的編碼* @throws Exception*/public static void convert(String fileName, String fromCharsetName,String toCharsetName) throws Exception {convert(new File(fileName), fromCharsetName, toCharsetName, null);}/*** 把指定文件或文件夾轉(zhuǎn)換成指定的編碼* * @param file* 要轉(zhuǎn)換的文件或文件夾* @param fromCharsetName* 源文件的編碼* @param toCharsetName* 要轉(zhuǎn)換的編碼* @throws Exception*/public static void convert(File file, String fromCharsetName,String toCharsetName) throws Exception {convert(file, fromCharsetName, toCharsetName, null);}/*** 把指定文件或文件夾轉(zhuǎn)換成指定的編碼* * @param file* 要轉(zhuǎn)換的文件或文件夾* @param fromCharsetName* 源文件的編碼* @param toCharsetName* 要轉(zhuǎn)換的編碼* @param filter* 文件名稱過濾器* @throws Exception*/public static void convert(String fileName, String fromCharsetName,String toCharsetName, FilenameFilter filter) throws Exception {convert(new File(fileName), fromCharsetName, toCharsetName, filter);}/*** 把指定文件或文件夾轉(zhuǎn)換成指定的編碼* * @param file* 要轉(zhuǎn)換的文件或文件夾* @param fromCharsetName* 源文件的編碼* @param toCharsetName* 要轉(zhuǎn)換的編碼* @param filter* 文件名稱過濾器* @throws Exception*/public static void convert(File file, String fromCharsetName,String toCharsetName, FilenameFilter filter) throws Exception {if (file.isDirectory()) {File[] fileList = null;if (filter == null) {fileList = file.listFiles();} else {fileList = file.listFiles(filter);}for (File f : fileList) {convert(f, fromCharsetName, toCharsetName, filter);}} else {if (filter == null|| filter.accept(file.getParentFile(), file.getName())) {String fileContent = getFileContentFromCharset(file,fromCharsetName);saveFile2Charset(file, toCharsetName, fileContent);}}}/*** 以指定編碼方式讀取文件,返回文件內(nèi)容** @param file* 要轉(zhuǎn)換的文件* @param fromCharsetName* 源文件的編碼* @return* @throws Exception*/public static String getFileContentFromCharset(File file,String fromCharsetName) throws Exception {if (!Charset.isSupported(fromCharsetName)) {throw new UnsupportedCharsetException(fromCharsetName);}InputStream inputStream = new FileInputStream(file);InputStreamReader reader = new InputStreamReader(inputStream,fromCharsetName);char[] chs = new char[(int) file.length()];reader.read(chs);String str = new String(chs).trim();reader.close();return str;}/*** 以指定編碼方式寫文本文件,存在會覆蓋* * @param file* 要寫入的文件* @param toCharsetName* 要轉(zhuǎn)換的編碼* @param content* 文件內(nèi)容* @throws Exception*/public static void saveFile2Charset(File file, String toCharsetName,String content) throws Exception {if (!Charset.isSupported(toCharsetName)) {throw new UnsupportedCharsetException(toCharsetName);}OutputStream outputStream = new FileOutputStream(file);OutputStreamWriter outWrite = new OutputStreamWriter(outputStream,toCharsetName);outWrite.write(content);outWrite.close();} }總結(jié)
以上是生活随笔為你收集整理的使用java进行文件编码转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Interleaving String
- 下一篇: EDM邮件列表清洁的重要性