本篇随笔主要介绍了一个用java语言写的将一个文件编码转换为另一个编码并不改变文件内容的工具类:

    通过读取源文件内容,用URLEncoding重新编码解码的方式实现。

     

    

  1. public class ChangeFileEncoding {
  2. public static int fileCount = 0;
  3. public static String sourceFileRoot = "替换为要转换的源文件或源目录"; // 将要转换文件所在的根目录
  4. public static String sourceCharset = "GB2312"; // 源文件编码
  5. public static String targetCharset = "utf8"; // 目标文件编码
  6. public static void main(String[] args) throws IOException {
  7. File fileDir = new File(sourceFileRoot);
  8. convert(fileDir);
  9. System.out.println("Total Dealed : " + fileCount + "Files");
  10. }
  11.  
  12. public static void convert(File file) throws IOException {
  13. // 如果是文件则进行编码转换,写入覆盖原文件
  14. if (file.isFile()) {
  15. // 只处理.java结尾的代码文件
  16. if (file.getPath().indexOf(".java") == -1) {
  17. return;
  18. }
  19. InputStreamReader isr = new InputStreamReader(new FileInputStream(
  20. file), sourceCharset);
  21. BufferedReader br = new BufferedReader(isr);
  22. StringBuffer sb = new StringBuffer();
  23. String line = null;
  24. while ((line = br.readLine()) != null) {
  25. // 注意写入换行符
  26. line = URLEncoder.encode(line, "utf8");
  27. sb.append(line + "\r\n");//windows 平台下 换行符为 \r\n
  28. }
  29. br.close();
  30. isr.close();
  31.  
  32. File targetFile = new File(file.getPath());
  33. OutputStreamWriter osw = new OutputStreamWriter(
  34. new FileOutputStream(targetFile), targetCharset);
  35. BufferedWriter bw = new BufferedWriter(osw);
  36. // 以字符串的形式一次性写入
  37. bw.write(URLDecoder.decode(sb.toString(), "utf8"));
  38. bw.close();
  39. osw.close();
  40.  
  41. System.out.println("Deal:" + file.getPath());
  42. fileCount++;
  43. } else {
  44. //利用递归对目录下的每个以.java结尾的文件进行编码转换
  45. for (File subFile : file.listFiles()) {
  46. convert(subFile);
  47. }
  48. }
  49. }
  50.  
  51. }

    

Java文件编码自动转换工具类(只改变编码,不会改变文件内容)的更多相关文章

  1. 【转载】Java文件编码自动转换工具类

    本篇随笔主要介绍了一个用java语言写的将一个文件编码转换为另一个编码并不改变文件内容的工具类: 通过读取源文件内容,用URLEncoding重新编码解码的方式实现. 1 public class C ...

  2. 【Java】字节数组转换工具类

    import org.apache.commons.lang.ArrayUtils; import java.nio.charset.Charset; /** * 字节数组转换工具类 */ publi ...

  3. 日期转换工具类 CommUtil.java

    package com.util; import java.text.ParseException; import java.text.SimpleDateFormat; import java.ut ...

  4. java 二进制数字符串转换工具类

    java 二进制数字符串转换工具类 将二进制转换成八进制 将二进制转换成十进制 将二进制转换成十六进制 将十进制转换成二进制 package com.iteye.injavawetrust.ad; i ...

  5. 我的Android进阶之旅------>Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换)

    Java文件大小转换工具类 (B,KB,MB,GB,TB,PB之间的大小转换) 有时候要做出如下所示的展示文件大小的效果时候,需要对文件大小进行转换,然后再进行相关的代码逻辑编写. 下面是一个Java ...

  6. txt文件按行处理工具类(可以截取小说、分析日志等)【我】

    txt文件按行处理工具类(可以分析日志.截取小说等) package file; import java.io.BufferedReader; import java.io.BufferedWrite ...

  7. c#中@标志的作用 C#通过序列化实现深表复制 细说并发编程-TPL 大数据量下DataTable To List效率对比 【转载】C#工具类:实现文件操作File的工具类 异步多线程 Async .net 多线程 Thread ThreadPool Task .Net 反射学习

    c#中@标志的作用   参考微软官方文档-特殊字符@,地址 https://docs.microsoft.com/zh-cn/dotnet/csharp/language-reference/toke ...

  8. Json与javaBean之间的转换工具类

    /**  * Json与javaBean之间的转换工具类  *  * {@code 现使用json-lib组件实现  *    需要  *     json-lib-2.4-jdk15.jar  * ...

  9. java中excel导入\导出工具类

    1.导入工具 package com.linrain.jcs.test; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import ...

随机推荐

  1. C#3.0新特性之扩展方法介绍

    C#3.0扩展方法是给现有类型添加一个方法.现在类型即可是基本数据类型(如int,String等),也可以是自己定义的类.以下是引用片段: //Demo--1 //扩展基本类型 namespace T ...

  2. eclipse 代码提示时闪退问题

    解决办法:在eclipse.ini里面最下面加上这句话 -Dorg.eclipse.swt.browser.DefaultType=mozilla

  3. Spark源码系列(五)分布式缓存

    这一章想讲一下Spark的缓存是如何实现的.这个persist方法是在RDD里面的,所以我们直接打开RDD这个类. def persist(newLevel: StorageLevel): this. ...

  4. SQL数据库对于保存特殊字符的解决办法

    数据库的Char.Vachar类型可以兼容汉字,但特殊字符不行,在保存包含有特殊字符的字符串.正文时,会将特殊符号替换成一个”?”号. 例如: “基础教育课程手机报•特刊” == > “基础教育 ...

  5. makeJar

    task makeJar(type: Jar) { //指定生成的jar名 baseName 'plugin' //从哪里打包class文件 from('build/intermediates/cla ...

  6. (OSP)外包工单关工单失败

    会计同事反映,在关几个外包(OSP)工单时,系统报错.错误讯息如下.检查错误讯息,发现Number of jobs failed in Delivered Quantity : 2.检查工单数据,均无 ...

  7. 一起做RGB-D SLAM 第二季 (一)

    小萝卜:师兄!过年啦!是不是很无聊啊!普通人的生活就是赚钱花钱,实在是很没意思啊! 师兄:是啊…… 小萝卜:他们都不懂搞科研和码代码的乐趣呀! 师兄:可不是嘛…… 小萝卜:所以今年过年,我们再做一个S ...

  8. [LeetCode] Fraction to Recurring Decimal 哈希表

    Given two integers representing the numerator and denominator of a fraction, return the fraction in ...

  9. 转 iOS Core Animation 动画 入门学习(一)基础

    iOS Core Animation 动画 入门学习(一)基础 reference:https://developer.apple.com/library/ios/documentation/Coco ...

  10. AngularJS 监控对象属性:$watch和$digest

    监控对象属性:$watch和$digest $watch和$digest是相辅相成的.两者一起,构成了Angular作用域的核心:数据变化的响应.如果你学习过WPF,并基于WPF使用过一些MVVM框架 ...