자바 파일 인 코딩 변환 방법

개발 과정 에서 파일 인 코딩 의 전환 을 만 날 수 있 습 니 다.개발 도구 eclipse 는 인 코딩 을 바 꿀 수 있다 고 하지만 불편 한 경우 도 있 습 니 다.예 를 들 어 원래 파일 자체 의 인 코딩 은 GBK 였 는데 지금 은 UTF-8 로 변환 하려 고 합 니 다.eclipse 에서 파일 인 코딩 을 UTF-8 로 직접 수정 하면 축하합니다.난 코드 입 니 다.GBK 에서 UTF-8 로 직접 변환 할 수 없 기 때문에 이 때 는 수 동 으로 인 코딩 을 변환 해 야 합 니 다.다음은 파일 인 코딩 변환 도구 클래스 입 니 다.

package com.mikan.stuff; 
 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileOutputStream; 
import java.io.FilenameFilter; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStream; 
import java.io.OutputStreamWriter; 
import java.nio.charset.Charset; 
import java.nio.charset.UnsupportedCharsetException; 
 
public class FileCharsetConverter { 
 
  public static void main(String[] args) throws Exception { 
    convert("D:\\stuff\\src\\main\\java\\com\\mikan\\stuff\\test.txt", 
        "GBK", "UTF-8", new FilenameFilter() { 
          @Override 
          public boolean accept(File dir, String name) { 
            return name.endsWith("txt"); 
          } 
        }); 
  } 
 
  /** 
   *                  
   * 
   * @param fileName 
   *             
   * @param fromCharsetName 
   *             
   * @param toCharsetName 
   *             
   * @throws Exception 
   */ 
  public static void convert(String fileName, String fromCharsetName, 
      String toCharsetName) throws Exception { 
    convert(new File(fileName), fromCharsetName, toCharsetName, null); 
  } 
 
  /** 
   *                  
   * 
   * @param file 
   *                
   * @param fromCharsetName 
   *             
   * @param toCharsetName 
   *             
   * @throws Exception 
   */ 
  public static void convert(File file, String fromCharsetName, 
      String toCharsetName) throws Exception { 
    convert(file, fromCharsetName, toCharsetName, null); 
  } 
 
  /** 
   *                  
   * 
   * @param file 
   *                
   * @param fromCharsetName 
   *             
   * @param toCharsetName 
   *             
   * @param filter 
   *             
   * @throws Exception 
   */ 
  public static void convert(String fileName, String fromCharsetName, 
      String toCharsetName, FilenameFilter filter) throws Exception { 
    convert(new File(fileName), fromCharsetName, toCharsetName, filter); 
  } 
 
  /** 
   *                  
   * 
   * @param file 
   *                
   * @param fromCharsetName 
   *             
   * @param toCharsetName 
   *             
   * @param filter 
   *             
   * @throws Exception 
   */ 
  public static void convert(File file, String fromCharsetName, 
      String toCharsetName, FilenameFilter filter) throws Exception { 
    if (file.isDirectory()) { 
      File[] fileList = null; 
      if (filter == null) { 
        fileList = file.listFiles(); 
      } else { 
        fileList = file.listFiles(filter); 
      } 
      for (File f : fileList) { 
        convert(f, fromCharsetName, toCharsetName, filter); 
      } 
    } else { 
      if (filter == null 
          || filter.accept(file.getParentFile(), file.getName())) { 
        String fileContent = getFileContentFromCharset(file, 
            fromCharsetName); 
        saveFile2Charset(file, toCharsetName, fileContent); 
      } 
    } 
  } 
 
  /** 
   *            ,       
   * 
   * @param file 
   *             
   * @param fromCharsetName 
   *             
   * @return 
   * @throws Exception 
   */ 
  public static String getFileContentFromCharset(File file, 
      String fromCharsetName) throws Exception { 
    if (!Charset.isSupported(fromCharsetName)) { 
      throw new UnsupportedCharsetException(fromCharsetName); 
    } 
    InputStream inputStream = new FileInputStream(file); 
    InputStreamReader reader = new InputStreamReader(inputStream, 
        fromCharsetName); 
    char[] chs = new char[(int) file.length()]; 
    reader.read(chs); 
    String str = new String(chs).trim(); 
    reader.close(); 
    return str; 
  } 
 
  /** 
   *             ,      
   * 
   * @param file 
   *             
   * @param toCharsetName 
   *             
   * @param content 
   *           
   * @throws Exception 
   */ 
  public static void saveFile2Charset(File file, String toCharsetName, 
      String content) throws Exception { 
    if (!Charset.isSupported(toCharsetName)) { 
      throw new UnsupportedCharsetException(toCharsetName); 
    } 
    OutputStream outputStream = new FileOutputStream(file); 
    OutputStreamWriter outWrite = new OutputStreamWriter(outputStream, 
        toCharsetName); 
    outWrite.write(content); 
    outWrite.close(); 
  } 
} 
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기