首先我们必须明确一点,为什么正常转换会乱码?

因为我们的数据写入是GBK写入的,然后展示的话是按照文件保存形势展示的,前面保存形势是GBK,一致,所以不乱码,而后面将保存形势变成了UTF-8,但是写入的内容是GBK形势的,编码解码方式不一致,所以产生乱码。

我们一般的解决乱码的思路是:

String s=new String(str.getBytes("GBK"),"UTF-8");

我将它解决的思路也是这样子的:

首先我们知道引起乱码的只是因为中文,中文乱码的方式看起来就是上面那样解决的。

将文件的编码改变,而且里面的内容的编写编码也随之改变,很显然不是单纯地对文件进行格式改变,改变格式的同时必定要改变文件的内容。

我的初步想法:

将文件内容读取到流中,然后按指定编码写入到目标文件中。

过程:

将目标文件取读到流中

读取源文件中的信息用字符串的形式展示,

将字符串写入目标文件

注意问题:

1、读取目标文件默认读取编码是当前项目编码而不是源文件编码,我们可以使用FileInputStream的含有编码方式的构造达到我们的要求

2、取读每一行字符串后的写入其实是不需要转换字符串格式的。就像我就犯了一个错误,我前面将读取成功的字符串通过new String(getBytes("GBK"),"UTF-8");的形式再次写入文件中,导致一直乱码,忽略了一个问题,就是我读取文件的时候其实已经解码了,此时字符串的编码方式应该就是我的项目编码方式了。

3、读取完一行数据记得的换行

其他的问题就是:

将文件夹中的所有指定文件都进行编码格式的改变,一个递归调用指定方法的过程罢了!

代码实现:

import org.apache.commons.io.IOUtils;

import java.io.*;
import java.util.ArrayList; /**
* Created by Administrator on 2016/12/1.
*/
public class Test {
String ROUTE_URL="D:/test";
String srcEncode;
ArrayList<File> fileArray=new ArrayList<File>(); public void trans(String filePath) throws Exception{
getFileClass(new File(filePath));
for (File file:fileArray){
transEncode(file.getAbsolutePath());
}
} /**
* 将文件由GBK格式读取,UTF-8格式写入
* 运行的项目应该是UTF-8的项目
* filePath用相对路径方便转移。如果使用绝对路径自己改一下输出流的url
*/
public void transEncode(String filePath) throws Exception{
File target=new File(ROUTE_URL,filePath);
FileInputStream fis=new FileInputStream(filePath);
BufferedReader br=new BufferedReader(new InputStreamReader(fis,srcEncode));
FileOutputStream fos=new FileOutputStream(target);
IOUtils.copy(br,fos);
fos.flush();
fis.close();
fos.close();
} /*
* 递归遍历指定目录下的指定后缀文件
*/
/*
* 返回值类型 void
* 参数列表 文件夹File
* 出口条件:文件,后缀名是.class,如果排除的话加!即可.多个可使用全局变量
*
*/
public void getFileClass(File file){
File[] files=file.listFiles();
for(File f:files){
if(f.isDirectory()){
getFileClass(f);
}else{
if(f.getName().endsWith(".java") || f.getName().endsWith(".jsp")){
System.out.println(f.getAbsolutePath());
fileArray.add(f);
}
}
}
}
}

如何解决GBK的编码的文件中的中文转换成为UTF-8编码的文件而且不乱码的更多相关文章

  1. JS文件中的中文在网页上显示为乱码解决方法

    转自:http://www.pc6.com/infoview/Article_63835.html 如果JS文件中的中文在网页上显示为乱码,不妨采用本文章中的方法来试一试,或许能解决使你很头疼的问题. ...

  2. 《Java虚拟机原理图解》1.5、 class文件中的方法表集合--method方法在class文件中是怎样组织的

    0. 前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描 ...

  3. Java基础知识强化之IO流笔记52:IO流练习之 把一个文件中的字符串排序后再写入另一个文件案例

    1. 把一个文件中的字符串排序后再写入另一个文件 已知s.txt文件中有这样的一个字符串:"hcexfgijkamdnoqrzstuvwybpl" 请编写程序读取数据内容,把数据排 ...

  4. extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”

    extern的原理很简单,就是告诉编译器:“你现在编译的文件中,有一个标识符虽然没有在本文件中定义,但是它是在别的文件中定义的全局变量,你要放行!”

  5. 在C的头文件中定义的结构体,如何在cpp文件中引用

    解决方案1:在cpp文件中放置.c,且在该文件中引用变量 解决方案2:在一个cpp文件中包含.c,但在另一个cpp文件中使用结构体变量 cpp文件1 cpp文件2 #include "dia ...

  6. 《Java虚拟机原理图解》1.4 class文件中的字段表集合--field字段在class文件中是怎样组织的

    0.前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描述 ...

  7. GBK 编码时 url 中带中文参数的问题

    项目中遇到的 GBK 编码问题,记录如下. 将代码精简为: <!DOCTYPE HTML> <html> <meta charset="gb2312" ...

  8. JS文件中的中文在网页引用时显示乱码的简单解决方式

    今天把一个jquery方法从前台cshtml文件转移到单独的js文件中后执行不成功,调试发现if判断中的中文字符串变成了乱码,之前在前台文件中是可以正常显示的,所以判定可能是跟文件的编码方式有关系. ...

  9. 解决python中write()函数向文件中写中文时出现乱码的问题

    今天看<python编程从入门到实践>的第10章文件.异常,在做练习的时候,向文件中写内容,但是写中文就不行,后来在百度上查了众多资料,解决方法如下: 解决:在open()函数中添加一个e ...

随机推荐

  1. google 搜索结果在新标签页打开

    google->setting->search setting->Where results open->勾选

  2. iTunes备份注意

    记住:     如果你有重要的信息在iTunes中无备份的话.那么开始不要同步了. 退出时,最好备份后在退出.

  3. 缷载vs2015后项目不能加载问题

    当加载项目时出现MSBuildToolsPath is not specified for the ToolsVersion "14.0" defined at "HKE ...

  4. 设计模式 - 代理模式(proxy pattern) 未使用代理模式 具体解释

    代理模式(proxy pattern) 未使用代理模式 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 部分代码參考: http://blog.csdn. ...

  5. cmake学习之-project

    一.系统版本 cmake version: 3.5.2 系统版本: Ubuntun 16.04 cmake docment: 3.14.4 最后更新: 2019-05-31 二.指令说明 projec ...

  6. Java编码辅助工具:Lombok —— 避免重复臃肿的代码,提高效率

    在项目开发过程中,经常会涉及到一些调整很少但又必不可少的环节,比如实体类的Getter/Setter方法,ToString方法等.这时可以使用Lombok来避免这种重复的操作,减少非核心代码的臃肿,提 ...

  7. 贷前系统ElasticSearch实践总结

    贷前系统负责从进件到放款前所有业务流程的实现,其中涉及一些数据量较大.条件多样且复杂的综合查询,引入ElasticSearch主要是为了提高查询效率,并希望基于ElasticSearch快速实现一个简 ...

  8. jdbcTemplaate queryForObject的两个易混淆的方法

    JdbcTemplate中有两个可能会混淆的queryForObject方法: 1.    Object queryForObject(String sql, Object[] args, Class ...

  9. eclipse-jee版配置tomcat

    Eclipse作为一款优秀的java开发开源IDE,集成了许多优秀的开发控件.下来我就如何安装eclipse及插件进行说明: 一.JDK安装   JDK是作为整个java的核心,包括运行环境,编译工具 ...

  10. 一些编译php时的configure 参数

    一些编译php时的configure 参数 ./configure –prefix=/usr/local/php php 安装目录 –with-apxs2=/usr/local/apache/bin/ ...