A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱婵 中级黑马   /  2014-2-20 12:58  /  795 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  1. import java.io.BufferedReader;
  2. import java.io.BufferedWriter;
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.FileOutputStream;
  6. import java.io.IOException;
  7. import java.io.InputStream;
  8. import java.io.InputStreamReader;
  9. import java.io.OutputStreamWriter;
  10. import java.io.Writer;

  11. /**
  12. *
  13. * @Title:ChangeFileCode.java
  14. * @Package:com.pde.pdp.ffc.util
  15. * @Description: 更改文件编码
  16. * @author guods
  17. * @date 2012-7-5 下午02:10:16
  18. * @version 1.0
  19. */
  20. public class ChangeFileCode {
  21.         // 读取的文件  
  22.     private String fileIn;  
  23.   
  24.     // 读取时文件用的编码  
  25.     private String fileInEn;  
  26.   
  27.     // 写出的文件  
  28.     private String fileOut;  
  29.   
  30.     // 写出时文件用的编码  
  31.     private String fileOutEn;  
  32.   
  33.     /**
  34.      * 获取源文件的编码
  35.      * @param filePath 源文件所在的绝对路径
  36.      * @return
  37.      */
  38.     public  String getFileEnCode(String filePath) {
  39.                 InputStream inputStream = null;
  40.                 String code = "";
  41.                 byte[] head = new byte[3];
  42.                 try {
  43.                         inputStream = new FileInputStream(filePath);
  44.                         inputStream.read(head);
  45.                 } catch (IOException e) {
  46.                         e.printStackTrace();
  47.                 }   finally {
  48.                         try {
  49.                                 if(inputStream!=null)
  50.                                 inputStream.close();
  51.                         } catch (IOException e) {
  52.                                 //e.printStackTrace();
  53.                         }
  54.                 }
  55.         code = "GB2312";  
  56.         if (head[0] == -1 && head[1] == -2 )  
  57.             code = "UTF-16";  
  58.         if (head[0] == -2 && head[1] == -1 )  
  59.             code = "Unicode";  
  60.            if(head[0]==-17 && head[1]==-69 && head[2] ==-65)  
  61.                    code = "UTF-8";  
  62.                 return code;
  63.         }
  64.   
  65.     public void setFileIn(String fileInPath, String fileInEncoding) {  
  66.         this.setFileIn(fileInPath);  
  67.         this.setFileInEn(fileInEncoding);  
  68.     }  
  69.   
  70.     public void setFileOut(String fileOutPath, String fileOutEncoding) {  
  71.         this.setFileOut(fileOutPath);  
  72.         this.setFileOutEn(fileOutEncoding);  
  73.     }  
  74.       
  75.     public void start() {     
  76.         String str = this.read(fileIn,fileInEn);     
  77.         this.write(fileOut, fileOutEn, str);     
  78.     }     
  79.       
  80.     /**
  81.      * 读文件
  82.      *  
  83.      * @param fileName
  84.      * @param encoding
  85.      */  
  86.     private String read(String fileName, String encoding) {  
  87.         try {  
  88.             BufferedReader in = new BufferedReader(new InputStreamReader(  
  89.                     new FileInputStream(fileName), encoding));  
  90.   
  91.             String string = "";  
  92.             String str = "";  
  93.             while ((str = in.readLine()) != null) {  
  94.                 string += str + "\n";  
  95.             }  
  96.             in.close();  
  97.             return string;  
  98.         } catch (Exception ex) {  
  99.             //ex.printStackTrace();  
  100.         }  
  101.         return "";  
  102.     }  
  103.   
  104.     /**
  105.      * 写文件
  106.      *  
  107.      * @param fileName
  108.      *            新的文件名
  109.      * @param encoding
  110.      *            写出的文件的编码方式
  111.      * @param str
  112.      */  
  113.     private void write(String fileName, String encoding, String str) {  
  114.         try {  
  115.             Writer out = new BufferedWriter(new OutputStreamWriter(  
  116.                     new FileOutputStream(fileName), encoding));  
  117.             out.write(str);  
  118.             out.close();  
  119.         } catch (Exception ex) {  
  120.             //ex.printStackTrace();  
  121.         }  
  122.     }  
  123.   
  124.     public String getFileIn() {  
  125.         return fileIn;  
  126.     }  
  127.   
  128.     public void setFileIn(String fileIn) {  
  129.         this.fileIn = fileIn;  
  130.     }  
  131.   
  132.     public String getFileInEn() {  
  133.         return fileInEn;  
  134.     }  
  135.   
  136.     public void setFileInEn(String fileInEn) {  
  137.         this.fileInEn = fileInEn;  
  138.     }  
  139.   
  140.     public String getFileOut() {  
  141.         return fileOut;  
  142.     }  
  143.   
  144.     public void setFileOut(String fileOut) {  
  145.         this.fileOut = fileOut;  
  146.     }  
  147.   
  148.     public String getFileOutEn() {  
  149.         return fileOutEn;  
  150.     }  
  151.   
  152.     public void setFileOutEn(String fileOutEn) {  
  153.         this.fileOutEn = fileOutEn;  
  154.     }  
  155.   
  156.    
  157.     public static void main(String[] args) {
  158.             String InputFilePath = "f:\\";
  159.             String FileName = "2.txt";
  160.            
  161.             ChangeFileCode changeFileCode = new ChangeFileCode();  
  162.         String path = InputFilePath+FileName;  
  163.         File file = new File(path);  
  164.         String fileCode = changeFileCode.getFileEnCode(path);
  165.         
  166.         if(fileCode!=null && !"".equals(fileCode) && !"UTF-8".equals(fileCode)) {
  167.                 changeFileCode.setFileIn(file.getPath(), fileCode);//如果文件编码为ANSI用GBK来读,如果是UTF-8用UTF-8来读  
  168.                 changeFileCode.setFileOut(file.getPath(), "UTF-8");//UTF-8则文件编码为UTF-8, 如果为GBK,编码为ANSI  
  169.                 changeFileCode.start();  
  170.         }
  171.     }
  172. }  
复制代码


评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马