>  기사  >  Java  >  Java를 사용하여 GBK 프로젝트를 uft8 메소드 공유로 변환하는 방법

Java를 사용하여 GBK 프로젝트를 uft8 메소드 공유로 변환하는 방법

黄舟
黄舟원래의
2017-08-13 09:34:001603검색

이 글에서는 주로 Java를 사용하여 GBK 프로젝트를 uft8로 변환하는 방법 예제를 소개합니다. 편집자는 꽤 좋다고 생각하므로 지금 공유하고 참고용으로 제공하겠습니다. 에디터를 따라가서 살펴봅시다

이 글에서는 Java를 사용하여 GBK 프로젝트를 uft8로 변환하고 모든 사람과 공유하는 방법을 소개합니다.

Windows에서 기본 인코딩은 GBK와 gb2312입니다. gbk java 프로젝트 UTF8의 경우, 프로젝트 인코딩을 직접 수정하면 내부 Java 파일의 한자가 실제로 깨져서 재미삼아 Java 프로젝트를 일괄 변환하는 프로그램을 작성했습니다.

왜 트랜스코딩하나요?

일부 오래된 프로젝트나 친구의 프로젝트는 Windows에서 UTF8이 아니라는 사실을 발견하지 못했습니다. 댓글 등을 읽어야 하는 경우 한 번에 한 파일씩 인코딩 속성을 변경할 수 없습니다.

이 프로그램의 시험 범위

gbk 코드 또는 gb2312 프로젝트 변환 가능

인코딩 변환 아이디어

원래는 인코딩을 자동으로 감지하고 자동으로 변환할 수 있는 범용 프로그램으로 만들고 싶었습니다. . 그러나 인코딩 유형의 잘못된 판단으로 인해 GBK로 변환되었습니다.

  1. GBK 인코딩을 개발하여 파일 스트림을 읽고 메모리에 로드한 후 문자열 형식 콘텐츠로 변환

  2. 문자열 콘텐츠를 utf8 문자열로 변환

  3. 문자열 콘텐츠를 파일에 쓰기

핵심 코드:


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를 사용하여 GBK 프로젝트를 uft8 메소드 공유로 변환하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.