java实现文件编码转换的方法
在开发过程中,可能会遇到文件编码的转换,虽然说开发工具eclipse可以转换编码,但是有的情况却很不方便。比如,原来文件本身的编码是GBK,现在要转换成UTF-8,如果直接在eclipse中把文件编码修改成UTF-8,恭喜你,是乱码,因为不能直接从GBK到UTF-8进行转换,这时就需要我们手动的来转换编码。下面是一个文件编码转换的工具类。
packagecom.mikan.stuff;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.FilenameFilter;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStream;
importjava.io.OutputStreamWriter;
importjava.nio.charset.Charset;
importjava.nio.charset.UnsupportedCharsetException;
publicclassFileCharsetConverter{
publicstaticvoidmain(String[]args)throwsException{
convert("D:\\stuff\\src\\main\\java\\com\\mikan\\stuff\\test.txt",
"GBK","UTF-8",newFilenameFilter(){
@Override
publicbooleanaccept(Filedir,Stringname){
returnname.endsWith("txt");
}
});
}
/**
*把指定文件或目录转换成指定的编码
*
*@paramfileName
*要转换的文件
*@paramfromCharsetName
*源文件的编码
*@paramtoCharsetName
*要转换的编码
*@throwsException
*/
publicstaticvoidconvert(StringfileName,StringfromCharsetName,
StringtoCharsetName)throwsException{
convert(newFile(fileName),fromCharsetName,toCharsetName,null);
}
/**
*把指定文件或目录转换成指定的编码
*
*@paramfile
*要转换的文件或目录
*@paramfromCharsetName
*源文件的编码
*@paramtoCharsetName
*要转换的编码
*@throwsException
*/
publicstaticvoidconvert(Filefile,StringfromCharsetName,
StringtoCharsetName)throwsException{
convert(file,fromCharsetName,toCharsetName,null);
}
/**
*把指定文件或目录转换成指定的编码
*
*@paramfile
*要转换的文件或目录
*@paramfromCharsetName
*源文件的编码
*@paramtoCharsetName
*要转换的编码
*@paramfilter
*文件名过滤器
*@throwsException
*/
publicstaticvoidconvert(StringfileName,StringfromCharsetName,
StringtoCharsetName,FilenameFilterfilter)throwsException{
convert(newFile(fileName),fromCharsetName,toCharsetName,filter);
}
/**
*把指定文件或目录转换成指定的编码
*
*@paramfile
*要转换的文件或目录
*@paramfromCharsetName
*源文件的编码
*@paramtoCharsetName
*要转换的编码
*@paramfilter
*文件名过滤器
*@throwsException
*/
publicstaticvoidconvert(Filefile,StringfromCharsetName,
StringtoCharsetName,FilenameFilterfilter)throwsException{
if(file.isDirectory()){
File[]fileList=null;
if(filter==null){
fileList=file.listFiles();
}else{
fileList=file.listFiles(filter);
}
for(Filef:fileList){
convert(f,fromCharsetName,toCharsetName,filter);
}
}else{
if(filter==null
||filter.accept(file.getParentFile(),file.getName())){
StringfileContent=getFileContentFromCharset(file,
fromCharsetName);
saveFile2Charset(file,toCharsetName,fileContent);
}
}
}
/**
*以指定编码方式读取文件,返回文件内容
*
*@paramfile
*要转换的文件
*@paramfromCharsetName
*源文件的编码
*@return
*@throwsException
*/
publicstaticStringgetFileContentFromCharset(Filefile,
StringfromCharsetName)throwsException{
if(!Charset.isSupported(fromCharsetName)){
thrownewUnsupportedCharsetException(fromCharsetName);
}
InputStreaminputStream=newFileInputStream(file);
InputStreamReaderreader=newInputStreamReader(inputStream,
fromCharsetName);
char[]chs=newchar[(int)file.length()];
reader.read(chs);
Stringstr=newString(chs).trim();
reader.close();
returnstr;
}
/**
*以指定编码方式写文本文件,存在会覆盖
*
*@paramfile
*要写入的文件
*@paramtoCharsetName
*要转换的编码
*@paramcontent
*文件内容
*@throwsException
*/
publicstaticvoidsaveFile2Charset(Filefile,StringtoCharsetName,
Stringcontent)throwsException{
if(!Charset.isSupported(toCharsetName)){
thrownewUnsupportedCharsetException(toCharsetName);
}
OutputStreamoutputStream=newFileOutputStream(file);
OutputStreamWriteroutWrite=newOutputStreamWriter(outputStream,
toCharsetName);
outWrite.write(content);
outWrite.close();
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。