大学IT网 - 最懂大学生的IT学习网站! QQ资料交流群:367606806
当前位置:大学IT网 > Java技巧 > JavaIO文件编码转换

JavaIO文件编码转换

关键词:JavaIO文件JavaIO文件编码转换  阅读(724) 赞(15)

[摘要]本文主要是对JavaIO文件编码转换的讲解,希望对大家学习JavaIO文件编码转换有所帮助。

  对IO操作真心不是很懂…对编码、乱码也是一知半解…今天遇到了一个需求,要求将一个文件进行编码转换,并且返回编码后的字符串,如原本的GBK编码,转换为UTF-8

  其中这个BytesEncodingDetect 类就不贴了。主要用了里面的获取文件编码格式。

  刚开始试了直接在源文件修改编码方式,采用URLEncoder和URLDecoder进行转换,却迟迟不行。出现了中文奇数最后一个字乱码

  百度找了解决方法,都未果,只好采用我的思路是:先读取源文件的内容,存放到StringBuffer里面,然后删除源文件,再重新new一个文件,再以另一中编码形式存放进去。

  查看编码后效果:注意不要在eclipse查看效果,eclipse以一种编码形式查看而已,所以可以在浏览器端查看如html文件,查看指定编码可以右键---编码,以此来判断是否成功。

  package com.test;

  import java.io.BufferedReader;

  import java.io.BufferedWriter;

  import java.io.File;

  import java.io.FileInputStream;

  import java.io.FileOutputStream;

  import java.io.InputStream;

  import java.io.InputStreamReader;

  import java.io.OutputStream;

  import java.io.OutputStreamWriter;

  import java.net.URLDecoder;

  import java.net.URLEncoder;

  public class Transcoding {

  private BytesEncodingDetect encode = new BytesEncodingDetect();

  public Transcoding() {

  }

  /**

  * 编码转换

  * @param toCharset 要转换的编码

  * @param path 要转换的文件路径

  * @return

  * @throws Exception

  */

  public String encoding(String toCharset, String path) throws Exception{

  File srcFile = new File(path);

  int index = encode.detectEncoding(srcFile);

  String charset = BytesEncodingDetect.javaname[index];

  // 编码相同,无需转码

  if (charset.equalsIgnoreCase(toCharset)) {

  return "编码一样,无需转换";

  }

  InputStream in = new FileInputStream(path);

  BufferedReader br = new BufferedReader(

  new InputStreamReader(in, charset));

  StringBuffer sb = new StringBuffer();

  String s1;

  while ((s1=br.readLine())!=null) {

  String s = URLEncoder.encode(s1, toCharset);

  sb.append(s+"\r\n");//一行+回车

  }

  br.close();

  srcFile.delete();//删除原来文件

  //重新以新编码写入文件并返回值

  File newfile = new File(path);//重新建原来的文件

  newfile.createNewFile();

  OutputStream out = new FileOutputStream(newfile);

  OutputStreamWriter  writer = new OutputStreamWriter(out, toCharset);

  BufferedWriter bw = new BufferedWriter(writer);

  bw.write(URLDecoder.decode(sb.toString(), toCharset));

  String result = URLDecoder.decode(sb.toString(), toCharset);

  bw.flush();//刷到文件中

  bw.close();

  return result;

  }

  }



相关评论