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

所属分类: 软件编程 / java 阅读数: 95
收藏 0 赞 0 分享

对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;
 }

}

更多精彩内容其他人还在看

JavaWeb项目部署到服务器详细步骤详解

这篇文章主要介绍了JavaWeb项目如何部署到服务器,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA基于支付宝小程序搭建springboot项目的详细步骤

这篇文章主要介绍了IDEA基于支付宝小程序搭建springboot项目的详细步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解SpringBoot应用服务启动与安全终止

这篇文章主要介绍了SpringBoot应用服务启动与安全终止,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Boot启动及退出加载项的方法

这篇文章主要介绍了Spring Boot启动及退出加载项的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Spring Data Jpa 自动生成表结构的方法示例

这篇文章主要介绍了Spring Data Jpa 自动生成表结构的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

IDEA中osgi的开发应用指南详解

这篇文章主要介绍了IDEA中osgi的开发应用指南详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详解用maven将dubbo工程打成jar包运行

这篇文章主要介绍了详解用maven将dubbo工程打成jar包运行,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

详解Java合并数组的两种实现方式

这篇文章主要介绍了Java合并数组的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

使用Jenkins Pipeline自动化构建发布Java项目的方法

这篇文章主要介绍了使用Jenkins Pipeline自动化构建发布Java项目的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

使用Maven配置Spring的方法步骤

这篇文章主要介绍了使用Maven配置Spring的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享
查看更多