欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java實(shí)現(xiàn)文件編碼轉(zhuǎn)換的方法

 更新時(shí)間:2018年05月15日 16:45:45   作者:MikanMu  
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)文件編碼轉(zhuǎn)換的方法,分享一個(gè)文件編碼轉(zhuǎn)換的工具類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在開發(fā)過程中,可能會(huì)遇到文件編碼的轉(zhuǎn)換,雖然說開發(fā)工具eclipse可以轉(zhuǎn)換編碼,但是有的情況卻很不方便。比如,原來文件本身的編碼是GBK,現(xiàn)在要轉(zhuǎn)換成UTF-8,如果直接在eclipse中把文件編碼修改成UTF-8,恭喜你,是亂碼,因?yàn)椴荒苤苯訌腉BK到UTF-8進(jìn)行轉(zhuǎn)換,這時(shí)就需要我們手動(dòng)的來轉(zhuǎn)換編碼。下面是一個(gè)文件編碼轉(zhuǎn)換的工具類。

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"); 
          } 
        }); 
  } 
 
  /** 
   * 把指定文件或目錄轉(zhuǎn)換成指定的編碼 
   * 
   * @param fileName 
   *      要轉(zhuǎn)換的文件 
   * @param fromCharsetName 
   *      源文件的編碼 
   * @param toCharsetName 
   *      要轉(zhuǎn)換的編碼 
   * @throws Exception 
   */ 
  public static void convert(String fileName, String fromCharsetName, 
      String toCharsetName) throws Exception { 
    convert(new File(fileName), fromCharsetName, toCharsetName, null); 
  } 
 
  /** 
   * 把指定文件或目錄轉(zhuǎn)換成指定的編碼 
   * 
   * @param file 
   *      要轉(zhuǎn)換的文件或目錄 
   * @param fromCharsetName 
   *      源文件的編碼 
   * @param toCharsetName 
   *      要轉(zhuǎn)換的編碼 
   * @throws Exception 
   */ 
  public static void convert(File file, String fromCharsetName, 
      String toCharsetName) throws Exception { 
    convert(file, fromCharsetName, toCharsetName, null); 
  } 
 
  /** 
   * 把指定文件或目錄轉(zhuǎn)換成指定的編碼 
   * 
   * @param file 
   *      要轉(zhuǎn)換的文件或目錄 
   * @param fromCharsetName 
   *      源文件的編碼 
   * @param toCharsetName 
   *      要轉(zhuǎn)換的編碼 
   * @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); 
  } 
 
  /** 
   * 把指定文件或目錄轉(zhuǎn)換成指定的編碼 
   * 
   * @param file 
   *      要轉(zhuǎn)換的文件或目錄 
   * @param fromCharsetName 
   *      源文件的編碼 
   * @param toCharsetName 
   *      要轉(zhuǎn)換的編碼 
   * @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); 
      } 
    } 
  } 
 
  /** 
   * 以指定編碼方式讀取文件,返回文件內(nèi)容 
   * 
   * @param file 
   *      要轉(zhuǎn)換的文件 
   * @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; 
  } 
 
  /** 
   * 以指定編碼方式寫文本文件,存在會(huì)覆蓋 
   * 
   * @param file 
   *      要寫入的文件 
   * @param toCharsetName 
   *      要轉(zhuǎn)換的編碼 
   * @param content 
   *      文件內(nèi)容 
   * @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(); 
  } 
} 

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 完美解決單例設(shè)計(jì)模式中懶漢式線程安全的問題

    完美解決單例設(shè)計(jì)模式中懶漢式線程安全的問題

    下面小編就為大家?guī)硪黄昝澜鉀Q單例設(shè)計(jì)模式中懶漢式線程安全的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • Java中的數(shù)組排序方式(快速排序、冒泡排序、選擇排序)

    Java中的數(shù)組排序方式(快速排序、冒泡排序、選擇排序)

    這篇文章主要介紹了Java中的數(shù)組排序方式(快速排序、冒泡排序、選擇排序),需要的朋友可以參考下
    2014-02-02
  • Java并發(fā)編程面試之線程池

    Java并發(fā)編程面試之線程池

    線程池和并發(fā)問題是Java技術(shù)面試中面試官比較喜歡問的問題之一。在這里,從面試的角度列出了大部分重要的問題,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java socket通信模擬QQ實(shí)現(xiàn)多人聊天室

    Java socket通信模擬QQ實(shí)現(xiàn)多人聊天室

    Socket在Java實(shí)戰(zhàn)網(wǎng)絡(luò)通信編程應(yīng)用中有非常重要的作用,你想要跟別人聯(lián)系都得通過socket占據(jù)端口來實(shí)現(xiàn),掌握Socket技術(shù)不僅在聊天應(yīng)用程序中需要用到(比如QQ什么的都都是用socket來寫的),而且對于學(xué)習(xí) Asp.net 也非常有幫助
    2022-07-07
  • MyBatis?SqlSource源碼示例解析

    MyBatis?SqlSource源碼示例解析

    這篇文章主要為大家介紹了MyBatis?SqlSource源碼示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • java使用PDFRenderer實(shí)現(xiàn)預(yù)覽PDF功能

    java使用PDFRenderer實(shí)現(xiàn)預(yù)覽PDF功能

    這篇文章主要為大家詳細(xì)介紹了java使用PDFRenderer實(shí)現(xiàn)預(yù)覽PDF功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Springboot事務(wù)失效的幾種情況解讀

    Springboot事務(wù)失效的幾種情況解讀

    這篇文章主要介紹了Springboot事務(wù)失效的幾種情況解讀,因?yàn)镾pring AOP默認(rèn)使用動(dòng)態(tài)代理,會(huì)給被代理的類生成一個(gè)代理類,事務(wù)相關(guān)的操作都通過代理來完成,使用內(nèi)部方法調(diào)用時(shí),使用的是實(shí)例調(diào)用,沒有通過代理類調(diào)用方法,因此事務(wù)不會(huì)檢測到失敗,需要的朋友可以參考下
    2023-10-10
  • SpringBoot基于Redis實(shí)現(xiàn)短信登錄的操作

    SpringBoot基于Redis實(shí)現(xiàn)短信登錄的操作

    驗(yàn)證碼登錄是非常常見的一種登錄方式,能夠簡化用戶登錄的過程,本文主要介紹了SpringBoot基于Redis實(shí)現(xiàn)短信登錄的操作,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-12-12
  • Java中的snowflake算法詳解

    Java中的snowflake算法詳解

    這篇文章主要介紹了Java中的snowflake算法詳解,Snowflake算法產(chǎn)生是為了滿足Twitter每秒上萬條消息的請求,每條消息都必須分配一條唯一的id,這些id還需要一些大致的順序,并且在分布式系統(tǒng)中不同機(jī)器產(chǎn)生的id必須不同,需要的朋友可以參考下
    2023-08-08
  • Java自帶注解、元注解、自定義注解的區(qū)別

    Java自帶注解、元注解、自定義注解的區(qū)別

    本文主要介紹了Java自帶注解、元注解、自定義注解的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06

最新評論