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

在开发过程中,可能会遇到文件编码的转换,虽然说开发工具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();
  }
} 

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

您可能感兴趣的文章:

  • Java 处理图片与base64 编码的相互转换的示例
  • Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码
  • java自定义实现base64编码转换
  • 深入解析Java中的编码转换以及编码和解码操作
  • Java IO文件编码转换实现代码
  • java中url汉字编码互相转换实例
  • java big5到gb2312的编码转换
(0)

相关推荐

  • Java IO文件编码转换实现代码

    对IO操作真心不是很懂...对编码.乱码也是一知半解...今天遇到了一个需求,要求将一个文件进行编码转换,并且返回编码后的字符串,如原本的GBK编码,转换为UTF-8 其中这个BytesEncodingDetect 类就不贴了.主要用了里面的获取文件编码格式. 刚开始试了直接在源文件修改编码方式,采用URLEncoder和URLDecoder进行转换,却迟迟不行.出现了中文奇数最后一个字乱码 百度找了解决方法,都未果,只好采用我的思路是:先读取源文件的内容,存放到StringBuffer里面,然

  • java自定义实现base64编码转换

    1.base64编码转换 所谓base64编码,即按照规则把字符转化为"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"这个字符集中的字符.具体规则如下: a.把每3个字节为一组,共24bit.每6bit一小组,每组前面加00,变为32bit.这样3个字节被扩展成了4个节,按照上面字符集编码. b.如果字节数不足3: 1)当字节数为2时,共16bit.每6bit一小组,最后一组即只有4bit,则不止前面加

  • java big5到gb2312的编码转换

    package com.Big5ToUTF8; import java.io.*; public class Big5Tran { private static final String tabFile ="bg-gb.tab"; private static byte[] data; static{ try{ FileInputStream fis =new FileInputStream(tabFile); int len =fis.available(); data =new b

  • Java 处理图片与base64 编码的相互转换的示例

    今天项目优化了一下上传头像的功能.采用 imagecropper 插件完成裁剪图片的效果. 这个插件裁剪完的图片都是 base64 加密的字符串,上传头像也就涉及到了如何把加密的字符串转换成图片的问题. 以下是代码: /** * @Description: 将base64编码字符串转换为图片 * @Author: * @CreateTime: * @param imgStr base64编码字符串 * @param path 图片路径-具体到文件 * @return */ public stat

  • Java Base64位编码与String字符串的相互转换,Base64与Bitmap的相互转换实例代码

    首先是网上大神给的类 package com.duanlian.daimengmusic.utils; public final class Base64Util { private static final int BASELENGTH = 128; private static final int LOOKUPLENGTH = 64; private static final int TWENTYFOURBITGROUP = 24; private static final int EIGH

  • java中url汉字编码互相转换实例

    Java代码如下: 复制代码 代码如下: package com.gjob.common;public class URLtoUTF8 {    //转换为%E4%BD%A0形式    public static String toUtf8String(String s) {        StringBuffer sb = new StringBuffer();        for (int i = 0; i < s.length(); i++) {            char c =

  • 深入解析Java中的编码转换以及编码和解码操作

    一.Java编码转换过程  我们总是用一个java类文件和用户进行最直接的交互(输入.输出),这些交互内容包含的文字可能会包含中文.无论这些java类是与数据库交互,还是与前端页面交互,他们的生命周期总是这样的:  (1).程序员在操作系统上通过编辑器编写程序代码并且以.java的格式保存操作系统中,这些文件我们称之为源文件.  (2).通过JDK中的javac.exe编译这些源文件形成.class类.  (3).直接运行这些类或者部署在WEB容器中运行,得到输出结果.  这些过程是从宏观上面来

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

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

  • java获取文件扩展名的方法小结【正则与字符串截取】

    本文实例讲述了java获取文件扩展名的方法.分享给大家供大家参考,具体如下: 问题描述:  有一个String类型:String imageName = "zy.jpg"; 请问我如何截取"."后面的后辍名. 解决方法一:使用正则表达式 package csdnTest; import java.util.regex.*; public class CSDNTest { public static void main(String[] ss) { String s=

  • java实现文件变化监控的方法(推荐)

    一. spring配置文件:application.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://ww

  • JAVA获取文件绝对路径的方法

    本文实例讲述了JAVA获取文件绝对路径的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /** * 获取一个类的class文件所在的绝对路径. 这个类可以是JDK自身的类,也可以是用户自定义的类,或者是第三方开发包里的类. * 只要是在本程序中可以被加载的类,都可以定位到它的class文件的绝对路径. * * @param cls *            一个对象的Class属性 * @return 这个类的class文件位置的绝对路径. 如果没有这个类的定义,则返回nu

  • JAVA实现数字大写金额转换的方法

    本文实例讲述了JAVA实现数字大写金额转换的方法.分享给大家供大家参考.具体如下: 例子:实现将阿拉伯数字的金额转换成中文大写金额的形式,例如: ¥1011 → 壹仟零壹拾壹元整. 大写数字为:零.壹.贰.叁.肆.伍.陆.柒.捌.玖.拾.佰.仟.万.亿 import java.io.*; import java.lang.String; public class change { public static void main(String agrs[]) { //Money用于存放输入的金额数

  • PHP实现自动识别原编码并对字符串进行编码转换的方法

    本文实例讲述了PHP实现自动识别原编码并对字符串进行编码转换的方法.分享给大家供大家参考,具体如下: /** * 对数据进行编码转换 * @param array/string $data 数组 * @param string $output 转换后的编码 * Created on 2016-7-13 */ function array_iconv($data, $output = 'utf-8') { $encode_arr = array('UTF-8','ASCII','GBK','GB2

  • Java读取文件的简单实现方法

    本文实例讲述了Java读取文件的简单实现方法,非常实用.分享给大家供大家参考之用.具体方法如下: 这是一个简单的读取文件的代码,并试着读取一个log文件,再输出. 主要代码如下: import java.io.*; public class FileToString { public static String readFile(String fileName) { String output = ""; File file = new File(fileName); if(file.

  • java实现文件重命名的方法

    本文实例讲述了java实现文件重命名的方法.分享给大家供大家参考.具体如下: 下载的电影总是有一些存在网站名称等没用的信息 作为一个强迫症患者 一定要删除他们 package sys.file; import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; import java.io.*; public class ZReName { public static void main(Str

  • java获取文件编码,jsoup获取html纯文本操作

    maven引入获取编码的jar <dependency> <groupId>com.ibm.icu</groupId> <artifactId>icu4j</artifactId> <version>67.1</version> </dependency> 获取文件编码 package com.lovnx.note.util; import com.ibm.icu.text.CharsetDetector; i

随机推荐