当前位置: 首页 > 编程笔记 >

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

仰成天
2023-03-14
本文向大家介绍java实现文件编码转换的方法,包括了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(); 
  } 
} 

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

 类似资料:
  • 本文向大家介绍vbs脚本实现批量转换文件编码,包括了vbs脚本实现批量转换文件编码的使用技巧和注意事项,需要的朋友参考一下 最近需要使用SourceInsight查看分析在Linux系统下开发的项目代码,我们知道Linux系统中文本文件默认编码格式是UTF-8,而Windows中文系统中的默认编码格式是Gb2312。系统内的编码格式有所区别倒无伤大雅,关键的是SourceInsight竟不支持UT

  • 本文向大家介绍VC中实现GB2312、BIG5、Unicode编码转换的方法,包括了VC中实现GB2312、BIG5、Unicode编码转换的方法的使用技巧和注意事项,需要的朋友参考一下 本文主要以实例形式讨论了VC编译环境下,实现字符串和文件编码方式转换的方法,在linux下请使用Strconv来实现。具体方法如下: 一、文件编码格式转换 二、字符串编码格式转换 三、API 函数:MultiBy

  • 任何指针都将有所帮助。 谢谢,阿希什

  • 本文向大家介绍Java处理图片实现base64编码转换,包括了Java处理图片实现base64编码转换的使用技巧和注意事项,需要的朋友参考一下 前言 环境:使用这个代码前:请确保你的JDk是JAVA8及其以上 开发测试地址:http://imgbase64.duoshitong.com/ 可以查看是否执行成功 注意事项 一般插件返回的base64编码的字符串都是有一个前缀的。"data:image

  • 问题内容: 有没有免费的Java库,可以将一种编码格式的字符串转换为其他编码格式,例如iconv?我正在使用Java版本1.3。 问题答案: 你不需要标准库以外的库,只需使用Charset即可。(你可以只使用String构造函数和getBytes方法,但就我个人而言,我不喜欢仅使用字符编码的名称。输入错误的空间太大。) 编辑:正如注释中指出的那样,你仍然可以使用Charset实例,但是可以轻松使用

  • 本文向大家介绍php实现转换ubb代码的方法,包括了php实现转换ubb代码的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php实现转换ubb代码的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的php程序设计有所帮助。