转自博文《Java文件编码格式转换》:

默认被转换的格式为GBK,转换成的格式为UTF-8

import info.monitorenter.cpdetector.CharsetPrinter;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.io.Writer;

public class EncodeFormatTransfer {

  public static String DefaultSrcEncodeFormat = "GBK";
  public static String DefaultDestEncodeFormat = "UTF-8";
  public static String UnsupportedEncodingExceptionError = "编码格式错误!";
  public static String FileNotFoundExceptionError = "文件不存在!";
  public static String IOExceptionError = "文件读写错误!";
  public static String IsUtf8File = "文件是UTF-8编码格式!";
  public static String IsNotUtf8File = "文件不是UTF-8编码格式!";
  public static String readFile(String path,String encodeFormat){
  if((encodeFormat==null || encodeFormat.equals(""))){
  if(isUTF8File(path))
    encodeFormat = DefaultDestEncodeFormat;
  else 
    encodeFormat = DefaultSrcEncodeFormat;
  }
  try {
    String context = "";
    InputStreamReader isr;
    isr = new InputStreamReader(new FileInputStream(path),encodeFormat);
    BufferedReader br=new BufferedReader(isr);
    String line;
    while((line=br.readLine())!=null){
      context += line + "\r\n";
      System.out.println(line);
  }
  br.close();
  return context;
  } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    System.out.println(UnsupportedEncodingExceptionError);
    e.printStackTrace();
  } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    System.out.println(FileNotFoundExceptionError);
    e.printStackTrace();
  }catch (IOException e) {
    // TODO Auto-generated catch block
    System.out.println(IOExceptionError);
    e.printStackTrace();
  };
  return "";   
}

/*public static boolean isUTF8File(String path){
  try {
    File file = new File(path);
    CharsetPrinter detector = new CharsetPrinter();   
    String charset = detector.guessEncoding(file);
    InputStream in = new java.io.FileInputStream(file);
    byte[] b = new byte[3];
    in.read(b);
    in.close();
    System.out.println(b[0] + " " + b[1] + " " + b[2]);
    if (b[0] == 0xEF && b[1] == 0xBB && b[2] == 0XBF){
      System.out.println(IsUtf8File);
          return true;
        }
          if (b[0] == -17 && b[1] == -69 && b[2] == -65){
          System.out.println(IsUtf8File);
          return true;
        }
  } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    System.out.println(FileNotFoundExceptionError);
  }catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    System.out.println(IOExceptionError);
  }
  System.out.println(IsNotUtf8File);
  return false;   
}*/
public static boolean isUTF8File(String path){
  try {
     File file = new File(path);
    CharsetPrinter detector = new CharsetPrinter();   
    String charset = detector.guessEncoding(file);
    if(charset.equalsIgnoreCase(DefaultDestEncodeFormat)){
      System.out.println(IsUtf8File);
      return true;
    }
  } catch (FileNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    System.out.println(FileNotFoundExceptionError);
  }catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    System.out.println(IOExceptionError);
  }
  System.out.println(IsNotUtf8File);
  return false;   
}

public static String transfer(String context,String encodeFormat) {
  if(encodeFormat==null || encodeFormat.equals(""))
    encodeFormat = DefaultDestEncodeFormat;
  try {
    byte[] content = context.getBytes();
    String result = new String(content,encodeFormat);
    return result;
  } catch (UnsupportedEncodingException e) {
    // TODO Auto-generated catch block
    System.out.println(UnsupportedEncodingExceptionError);
    e.printStackTrace();
  }
  return "";
}

public static void writeFile(String context,String path,String destEncode){
  File file = new File(path);
  if(file.exists())
    file.delete();
  BufferedWriter  writer;
  try {
    FileOutputStream fos = new FileOutputStream(path,true);    
    writer = new BufferedWriter(new OutputStreamWriter(fos, destEncode));
    writer.append(context);
    writer.close();
  } catch (IOException e) {
    System.out.println(IOExceptionError);
    e.printStackTrace();
  }
}

public static void writeFile(String context,String path){
  File file = new File(path);
  if(file.exists())
  file.delete();
  Writer  writer;
  try {
    writer = new FileWriter(file, true);
    writer.append(context);
    writer.close();
  } catch (IOException e) {
    System.out.println(IOExceptionError);
    e.printStackTrace();
  }
}

public static void transfer(String srcPath,String destPath,String srcEncode,String destEncode){
  if(destPath==null || destPath.equals(""))
    destPath = srcPath;
  String context = readFile(srcPath,srcEncode);
  context = transfer(context,destEncode);
  writeFile(context,destPath,destEncode);
}

public static void transfer(String srcPath,String destPath,String destEncode){
  if(isUTF8File(srcPath)){
    transfer(srcPath,destPath,DefaultDestEncodeFormat,destEncode);
  }else{
    transfer(srcPath,destPath,DefaultSrcEncodeFormat,destEncode);
  }
}

public static void main(String args[]){
  String path1 = "f:/Notepad1.java";
  String path2 = "f:/Notepad2.java";
  transfer(path1,path2,"UTF-8");
  transfer(path1,path2,"UTF-8","UTF-8");
}
}

 
java读取文件,处理过程中,可能因为文件的编码问题导致了中文乱码。有时需要将UTF-8的改为ANSI的编码。以下代码就可以判断文件是什么编码方式。
主要jar包:cpdetector.jar 

下载地址: http://cpdetector.sourceforge.net/

同时还需jchardet-1.0.jar这个包,否则detector.add(cpdetector.io.JChardetFacade.getInstance());  会报错;

下载地址: http://www.jarfinder.com/index.php/jars/versionInfo/40297

还有一个antlr.jar,不然运行过程中detector.add(new ParsingDetector(false));会报错;

下载地址: http://www.java2s.com/Code/Jar/ABC/Downloadantlrjar.htm

 
 

Java文件编码格式转换的更多相关文章

  1. FilesCodingConvert--批量文件编码格式转换工具

    FilesCodingConvert–批量文件编码格式转换工具 简介 最近开始学习使用Android Studio,因为它的方便易用,我打算以后就不在使用ADT的方式编写Android项目了.当从Ec ...

  2. java项目编码格式转换(如GBK转UTF-8)

    昨天突然下了个Java项目,把项目导入到eclipse中,发现项目是gbk编码格式想把项目变为utf-8,但是发现转换格式比较麻烦就写了这个代码,后面改进了下,想到说不定有人也需要就把它写了出来 代码 ...

  3. Linux 文件编码格式转换

    如果需要在Linux 中操作windows下的文件,那么经常遇到文件编码转换的问题. Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-. 查看文件编码 在vim 中 ...

  4. Linux下查看文件编码,文件编码格式转换和文件名编码转换

    linux相关   2008-10-07 10:46   阅读1392   评论0   字号: 大大  中中  小小  如果你需要在Linux中 操作windows下的文件,那么你可能会经常遇到文件编 ...

  5. MacOS 自带文件编码格式转换工具

    [命令功能]iconv 是Linux操作系统用于将文本编码格式从一种转外另外一种的工具命令.[使用方法] iconv [OPTION...] [-f ENCODING] [-t ENCODING] [ ...

  6. ubuntu 文件编码格式 转换

    正在学习jquery,之前在windows下弄的编码到了 ubuntu下,乱码: 找到一个方法: iconv : 源文件:a.htm 格式:gbk: 目标:    a.html 格式:utf8: ic ...

  7. 在Vim中查看文件编码和文件编码转换

    在Vim中查看文件编码和文件编码转换 风亡小窝 关注  0.2 2016.09.26 22:43* 字数 244 阅读 5663评论 0喜欢 2 在Vim中查看文件编码 :set fileencodi ...

  8. 解决eclipse中的Java文件,使用idea打开的乱码问题

    吐槽: 在克隆一些Github上面资源的时候,使用idea打开,会出现乱码的情况 而使用eclipse打开,这种情况就会消失.「是因为eclipse使用的是GBK编码,idea使用的是utf-8」 这 ...

  9. Linux查看文件编码格式及文件编码转换

    Linux查看文件编码格式及文件编码转换   如果你需要在Linux 中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题.Windows中默认的文件格式是GBK(gb2312),而L ...

随机推荐

  1. netstat -ano,查看已占用端口,结束已被占用的端口,ntsd,关闭任务管理器杀不了的进程

    cmd——回车,输入netstat -ano——回车,可以查看已占用的端口,记下端口的PID,然后打开任务管理器,点查看,选择列,勾选PID确定,找到对应的PID,结束进程,如果结束不了或者结束后还不 ...

  2. [HDOJ1175]连连看

    原题链接:http://acm.hdu.edu.cn/showproblem.php?pid=1175 连连看 Time Limit: 20000/10000 MS (Java/Others)     ...

  3. Music Player团队项目(一)

    团队成员及分工 团队: Blue 团队共有六人 姓名:     学号后四位:       贡献分: 张   宇(队长)  1152          1+1.8=2.8分 侯贺琦          1 ...

  4. poj 3348--Cows(凸包求面积)

    链接:http://poj.org/problem?id=3348 Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions:  ...

  5. spring的自动装配(default-autowire="byName")

    自动装配,官方给出的定义是这样:Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系.因此,如果可能的话,可以自 动让Spring通过检查BeanFactory中的内 ...

  6. ubuntu 安装遇到黑屏

    1.安装了ubuntu之后,进入登录页面,然后用输入密码后就黑屏了,按ctrl+alt+f1都没用,也进不去命令界面,查找资料后发现是必须在虚拟机->设置->硬件->显示器,上把加速 ...

  7. HDU-4507 吉哥系列故事——恨7不成妻 数位DP

    题意:给定区间[L, R]求区间内与7无关数的平方和.一个数当满足三个规则之一则认为与7有关:1.整数中某一位是7:2.整数的每一位加起来的和是7的整数倍:3.这个整数是7的整数倍: 分析:初看起来确 ...

  8. Win7_64位使用Mysql Odbc

    1.首先不能安装Mysql Odbc 64位,因为我们的Mysql是32位,使用Mysql Odbc 64位连接Mysql 32位,报错:驱动程序与应用程序之间的体系结构不匹配. 2.要安装Mysql ...

  9. linux下在jar包中找类是否存在

    find /usr/lib -name "*.jar" -exec grep -Hsli 类名 {} \;

  10. 转!!sql server 数据库 索引的原理与应用

    索引的概念 索引的用途:我们对数据查询及处理速度已成为衡量应用系统成败的标准,而采用索引来加快数据处理速度通常是最普遍采用的优化方法. 索引是什么:数据库中的索引类似于一本书的目录,在一本书中使用目录 ...