用java将GBK工程转为uft8的方法实例

 更新时间:2017年08月12日 10:16:14   作者:山不转水转  
本篇文章主要介绍了用java将GBK工程转为uft8的方法实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

本文介绍了用java将GBK工程转为uft8,分享给大家,具体如下:

windows下的默认编码为GBK还有gb2312,如何把gbk的java工程转为utf8的呢,如果直接修改工程编码,其实里面的java文件中中文是会乱码的,写了个批量转换java工程的程序,消遣一下。

为什么要转码?

有些老的项目,或者朋友的项目之前没注意在windows上不是utf8,而你有需要看注释或者什么,总不能一个文件一个文件的去改编码属性吧。

本程序试用范围

gbk的代码,或者gb2312的工程均可以转换

编码转换的思路

本来想做成一个通用的会自动检测编码,自动转换的程序。但是由于判断编码类型不准,所以做成了针对GBK的转换。

  1. 制定gbk编码把文件流读进来,加载到内存,转为String类型的内容
  2. 将String内容转为utf8的String
  3. 将String内容写入文件

核心代码:

public class TransferProject{
  public static void transferFile(String pathName,intdepth)throwsException{
    File dirFile = new File(pathName);
    if (!isValidFile(dirFile)) return;
    //获取此目录下的所有文件名与目录名
    String[] fileList = dirFile.list();
    int currentDepth = depth + 1;
    for (int i = 0; i < fileList.length; i++) {
      String string = fileList[i];
      File file = new File(dirFile.getPath(), string);
      String name = file.getName();
      //如果是一个目录,搜索深度depth++,输出目录名后,进行递归
      if (file.isDirectory()) {
        //递归
        transferFile(file.getCanonicalPath(), currentDepth);
      } else {
        if (name.contains(".java") || name.contains(".properties") || name.contains(".xml")) {
          readAndWrite(file);
          System.out.println(name + " has converted to utf8 ");
        }
      }
    }
  }

 
  private static boolean isValidFile(File dirFile)throwsIOException{
    if (dirFile.exists()) {
      System.out.println("file exist");
      return true;
    }
    if (dirFile.isDirectory()) {
      if (dirFile.isFile()) {
        System.out.println(dirFile.getCanonicalFile());
      }
      return true;
    }
    return false;
  }

  private static void readAndWrite(File file)throwsException{
    String content = FileUtils.readFileByEncode(file.getPath(), "GBK");
    FileUtils.writeByBufferedReader(file.getPath(), new String(content.getBytes("UTF-8"), "UTF-8"));
  }

  public static void main(String[] args)throwsException{
    //程序入口,制定src的path
    String path = "/Users/mac/Downloads/unit06_jdbc/src";
    transferFile(path, 1);
  }
}
public class FileUtils{
  public static void writeByBufferedReader(String path, String content){
    try {
      File file = new File(path);
      file.delete();
      if (!file.exists()) {
        file.createNewFile();
      }

      FileWriter fw = new FileWriter(file, false);
      BufferedWriter bw = new BufferedWriter(fw);
      bw.write(content);
      bw.flush();
      bw.close();

    } catch (IOException e) {
      e.printStackTrace();
    }
  }
  public staticStringreadFileByEncode(String path, String chatSet)throwsException{
    InputStream input = new FileInputStream(path);
    InputStreamReader in = new InputStreamReader(input, chatSet);
    BufferedReader reader = new BufferedReader(in);
    StringBuffer sb = new StringBuffer();
    String line = reader.readLine();
    while (line != null) {
      sb.append(line);
      sb.append("\r\n");
      line = reader.readLine();
    }
    return sb.toString();
  }
}

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

相关文章

  • java读取xml配置参数代码实例

    java读取xml配置参数代码实例

    这篇文章主要介绍了java读取xml配置参数代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • springmvc重定向实现方法解析

    springmvc重定向实现方法解析

    这篇文章主要介绍了springmvc重定向实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 使用Maven创建和管理多模块项目的详细步骤

    使用Maven创建和管理多模块项目的详细步骤

    使用Maven进行多模块项目管理是一种常见的做法,它可以帮助你组织大型项目,使其结构更加清晰,便于维护和构建,以下是使用Maven创建和管理多模块项目的详细步骤,需要的朋友可以参考下
    2024-10-10
  • Java实现操作JSON的便捷工具类完整实例【重写Google的Gson】

    Java实现操作JSON的便捷工具类完整实例【重写Google的Gson】

    这篇文章主要介绍了Java实现操作JSON的便捷工具类,基于重写Google的Gson实现,涉及java针对json数据的各种常见转换操作实现技巧,需要的朋友可以参考下
    2017-10-10
  • java接口使用默认方法的讲解

    java接口使用默认方法的讲解

    在本篇文章里小编给大家整理了一篇关于java接口使用默认方法的讲解内容,有需要的朋友们可以学习下。
    2021-04-04
  • Java之HashMap.values()转List时的错误和正确演示

    Java之HashMap.values()转List时的错误和正确演示

    这篇文章主要介绍了Java之HashMap.values()转List时的错误和正确演示,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • SpringBoot通过redisTemplate调用lua脚本并打印调试信息到redis log(方法步骤详解)

    SpringBoot通过redisTemplate调用lua脚本并打印调试信息到redis log(方法步骤详解)

    这篇文章主要介绍了SpringBoot通过redisTemplate调用lua脚本 并打印调试信息到redis log,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Netty分布式NioSocketChannel注册到selector方法解析

    Netty分布式NioSocketChannel注册到selector方法解析

    这篇文章主要为大家介绍了Netty分布式源码分析NioSocketChannel注册到selector方法的解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • Java面试题冲刺第五天--基础篇2

    Java面试题冲刺第五天--基础篇2

    这篇文章主要为大家分享了最有价值的三道java面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • SpringBoot Cache缓存概念讲解

    SpringBoot Cache缓存概念讲解

    这篇文章主要介绍了Springboot cache缓存,使用缓存最关键的一点就是保证缓存与数据库的数据一致性,本文给大家介绍最常用的缓存操作模式,对Springboot cache缓存操作流程感兴趣的朋友一起看看吧
    2022-12-12

最新评论