欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java实现文件编码转换的方法

程序员文章站 2023-12-17 18:53:10
在开发过程中,可能会遇到文件编码的转换,虽然说开发工具eclipse可以转换编码,但是有的情况却很不方便。比如,原来文件本身的编码是gbk,现在要转换成utf-8,如果直接...

在开发过程中,可能会遇到文件编码的转换,虽然说开发工具eclipse可以转换编码,但是有的情况却很不方便。比如,原来文件本身的编码是gbk,现在要转换成utf-8,如果直接在eclipse中把文件编码修改成utf-8,恭喜你,是乱码,因为不能直接从gbk到utf-8进行转换,这时就需要我们手动的来转换编码。下面是一个文件编码转换的工具类。

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() { 
          @override 
          public boolean accept(file dir, string name) { 
            return name.endswith("txt"); 
          } 
        }); 
  } 
 
  /** 
   * 把指定文件或目录转换成指定的编码 
   * 
   * @param filename 
   *      要转换的文件 
   * @param fromcharsetname 
   *      源文件的编码 
   * @param tocharsetname 
   *      要转换的编码 
   * @throws exception 
   */ 
  public static void convert(string filename, string fromcharsetname, 
      string tocharsetname) throws exception { 
    convert(new file(filename), fromcharsetname, tocharsetname, null); 
  } 
 
  /** 
   * 把指定文件或目录转换成指定的编码 
   * 
   * @param file 
   *      要转换的文件或目录 
   * @param fromcharsetname 
   *      源文件的编码 
   * @param tocharsetname 
   *      要转换的编码 
   * @throws exception 
   */ 
  public static void convert(file file, string fromcharsetname, 
      string tocharsetname) throws exception { 
    convert(file, fromcharsetname, tocharsetname, null); 
  } 
 
  /** 
   * 把指定文件或目录转换成指定的编码 
   * 
   * @param file 
   *      要转换的文件或目录 
   * @param fromcharsetname 
   *      源文件的编码 
   * @param tocharsetname 
   *      要转换的编码 
   * @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); 
  } 
 
  /** 
   * 把指定文件或目录转换成指定的编码 
   * 
   * @param file 
   *      要转换的文件或目录 
   * @param fromcharsetname 
   *      源文件的编码 
   * @param tocharsetname 
   *      要转换的编码 
   * @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); 
      } 
    } 
  } 
 
  /** 
   * 以指定编码方式读取文件,返回文件内容 
   * 
   * @param file 
   *      要转换的文件 
   * @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 
   *      要转换的编码 
   * @param content 
   *      文件内容 
   * @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(); 
  } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: