将整个工程转化编码格式的方法

我们编程的时候经常遇到这样的问题,我们打开Eclipse就创建了工程开始编辑,但是往往做到一半的时候,被提示按照规定编码格式需要统一为UTF-8。

但是我们的Eclipse默认是选择GBK的,这时候有的人就会一个一个的用其他工具打开,然后粘贴到Eclipse里面替换掉原文件。这样确实不错,但是文件太多时就显得比较麻烦了,而且这也不符合程序员的特点(将一切事情尽可能程序化)。

今天我也遇到了这样的问题,于是简单的写了一个2个java类,实现了该功能,和大家分享一下吧。BUG肯定是有的,但是暂时我还没发现,暂时转化的还都是正常的。

 

[java][/java] view plaincopy

  1. package com.lxl.action;
  2. import java.io.File;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.util.HashSet;
  6. import java.util.Set;
  7. import com.lxl.helper.IOHelper;
  8. public class Converted {
  9.     private static String incode=”GBK”;//原编码格式
  10.     private static String outcode=”UTF-8″;//将要转化为的编码格式
  11.     private static Set<String> typeset;//需要转码的文件后缀
  12.     private static String root=”E://Test”;//工程文件夹
  13.     public Converted() {
  14.         typeset=new HashSet<String>();
  15.         typeset.add(“java”);//这里进行添加
  16.     }
  17.     public static void main(String[] args) {
  18.         Converted converted = new Converted();
  19.         File file=new File(root);
  20.         converted.show(file);
  21.     }
  22.     public void show(File file){
  23.         if(file.isDirectory()){
  24.             File[] fs = file.listFiles();
  25.             for(File f:fs){
  26.                 show(f);
  27.             }
  28.         }else{
  29.             String name = file.getName();
  30.             String[] split = name.split(“\\.”);
  31.             String filename=split[split.length-1];
  32.             if(typeset.contains(filename)){
  33.                 replaceFile(file);
  34.             }
  35.         }
  36.     }
  37.     public void replaceFile(File file){
  38.         try {
  39.             String str = IOHelper.readStrByCode(new FileInputStream(file), incode);
  40.             file.delete();
  41.             FileOutputStream os = new FileOutputStream(file);
  42.             IOHelper.writerStrByCode(os, outcode,str);
  43.             os.flush();
  44.         } catch (Exception e) {
  45.             // TODO Auto-generated catch block
  46.             e.printStackTrace();
  47.         }
  48.     }
  49. }

下面就是工具类。

 

 

[java][/java] view plaincopy

  1. package com.lxl.helper;
  2. import java.io.BufferedReader;
  3. import java.io.BufferedWriter;
  4. import java.io.ByteArrayInputStream;
  5. import java.io.ByteArrayOutputStream;
  6. import java.io.File;
  7. import java.io.FileInputStream;
  8. import java.io.FileOutputStream;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.io.InputStreamReader;
  12. import java.io.OutputStream;
  13. import java.io.OutputStreamWriter;
  14. import java.net.HttpURLConnection;
  15. import java.net.URL;
  16. public class IOHelper {
  17.     /**
  18.      * 把以一种编码格式的输入流转化为另一种编码格式的输出流
  19.      * @return
  20.      */
  21.     public static void fromIsToOsByCode(InputStream is,OutputStream os,String incode,String outcode){
  22.         BufferedReader reader=null;
  23.         BufferedWriter writer=null;
  24.         try {
  25.              reader = new BufferedReader(new InputStreamReader(is,incode));
  26.              writer= new BufferedWriter(new OutputStreamWriter(os, outcode));
  27.              String line;
  28.              while((line=reader.readLine())!=null){
  29.                  writer.write(line+”\n”);
  30.              }
  31.         } catch (Exception e) {
  32.             e.printStackTrace();
  33.         }finally{
  34.             try {
  35.                 reader.close();
  36.             } catch (IOException e) {
  37.                 // TODO Auto-generated catch block
  38.                 e.printStackTrace();
  39.             }
  40.         }
  41.     }
  42.     /**
  43.      * 以指定的格式来读取输入流
  44.      */
  45.     public static String readStrByCode(InputStream is,String code){
  46.         StringBuilder builder=new StringBuilder();
  47.         BufferedReader reader=null;
  48.         try {
  49.              reader = new BufferedReader(new InputStreamReader(is,code));
  50.              String line;
  51.              while((line=reader.readLine())!=null){
  52.                  builder.append(line+”\n”);
  53.              }
  54.         } catch (Exception e) {
  55.             e.printStackTrace();
  56.         }finally{
  57.             try {
  58.                 reader.close();
  59.             } catch (IOException e) {
  60.                 // TODO Auto-generated catch block
  61.                 e.printStackTrace();
  62.             }
  63.         }
  64.         return builder.toString();
  65.     }
  66.     /**
  67.      * 输入InputStream流,返回字符串文字。
  68.      * @param is
  69.      * @return
  70.      */
  71.     public static String fromIputStreamToString(InputStream is){
  72.         if(is==null)return null;
  73.         ByteArrayOutputStream baos = new ByteArrayOutputStream();
  74.         int i = -1;
  75.         try {
  76.             while ((i = is.read()) != -1) {
  77.                 baos.write(i);
  78.             }
  79.         } catch (IOException e) {
  80.             // TODO Auto-generated catch block
  81.             e.printStackTrace();
  82.         }
  83.         return baos.toString();
  84.     }
  85.     /**
  86.      * 输入InputStream流和文件地址,返回成功与否。
  87.      * @param is
  88.      * @return
  89.      */
  90.     public static boolean fromIputStreamToFile(InputStream is,String outfilepath){
  91.         byte[] b=new byte[1024];
  92.         FileOutputStream fos=null;
  93.         try {
  94.             fos=new FileOutputStream(new File(outfilepath));
  95.             while((is.read(b, 0, 1024))!=-1){
  96.                 fos.write(b);
  97.             }
  98.             fos.flush();
  99.         } catch (IOException e) {
  100.             // TODO Auto-generated catch block
  101.             e.printStackTrace();
  102.             return false;
  103.         }finally{
  104.             try {
  105.                 fos.close();
  106.             } catch (IOException e) {
  107.                 // TODO Auto-generated catch block
  108.                 e.printStackTrace();
  109.             }
  110.         }
  111.         return true;
  112.     }
  113.     /**
  114.      * 输入文件地址,返回inputStream流。
  115.      * @param is
  116.      * @return
  117.      */
  118.     public static InputStream fromFileToIputStream(String infilepath){
  119.         FileInputStream fis=null;
  120.         try {
  121.             fis=new FileInputStream(new File(infilepath));
  122.         } catch (IOException e) {
  123.             // TODO Auto-generated catch block
  124.             e.printStackTrace();
  125.         }
  126.         return fis;
  127.     }
  128.     public static InputStream fromStringToIputStream(String s) {
  129.         if (s != null && !s.equals(“”)) {
  130.             try {
  131.                 ByteArrayInputStream stringInputStream = new ByteArrayInputStream(
  132.                         s.getBytes());
  133.                 return stringInputStream;
  134.             } catch (Exception e) {
  135.                 e.printStackTrace();
  136.             }
  137.         }
  138.         return null;
  139.     }
  140.     /**
  141.      * 把输入流转化成UTF-8格式的输入流
  142.      * @param in
  143.      * @param charset
  144.      * @return
  145.      * @throws Exception
  146.      */
  147. //  public static InputStream fromInputStreamToInputStreamInCharset(
  148. //          InputStream in, String charset) throws Exception {
  149. //      StringBuilder builder=new StringBuilder();
  150. //      byte[] buffer = new byte[2048];
  151. //      int len = -1;
  152. //      while ((len = in.read(buffer)) != -1) {
  153. //          builder.append(EncodingUtils.getString(buffer, 0, len, “UTF-8”));
  154. //      }
  155. //      return IOHelper.fromStringToIputStream(builder.toString());
  156. //  }
  157.     public static InputStream getInputStreamFromUrl(String urlstr){
  158.         try {
  159.             InputStream is = null;
  160.             HttpURLConnection conn = null;
  161.             System.out.println(“urlstr:”+urlstr);
  162.             URL url = new URL(urlstr);
  163.             conn = (HttpURLConnection) url.openConnection();
  164.             if (conn.getResponseCode() == 200) {
  165.                 is = conn.getInputStream();
  166.                 return is;
  167.             }
  168.         } catch (Exception e) {
  169.             System.out.println(e.toString());
  170.         }
  171.         return null;
  172.     }
  173.     public static void writerStrByCode(FileOutputStream os,
  174.             String outcode,String str) {
  175.         BufferedWriter writer=null;
  176.         try {
  177.              writer= new BufferedWriter(new OutputStreamWriter(os, outcode));
  178.              writer.write(str);
  179.              writer.flush();
  180.         } catch (Exception e) {
  181.             e.printStackTrace();
  182.         }
  183.     }
  184. }

标签