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(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。