论坛首页 入门技术论坛

文件编码转换

浏览 2730 次
该帖已经被评为新手帖
作者 正文
   发表时间:2007-04-24  

目录文件编码转换

java 代码
  1. package com.xw.file;   
  2.   
  3. import java.io.BufferedReader;   
  4. import java.io.BufferedWriter;   
  5. import java.io.File;   
  6. import java.io.FileFilter;   
  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.io.Reader;   
  15. import java.io.UnsupportedEncodingException;   
  16. import java.io.Writer;   
  17.   
  18. public class FileEncodeConverter {   
  19.   
  20.     // 原文件目录   
  21.     private static String srcDir = "x:/src";   
  22.     // 转换后的存放目录   
  23.     private static String desDir = "x:/des";    
  24.     // 源文件编码   
  25.     private static String srcEncode = "gb2312";   
  26.     // 输出文件编码   
  27.     private static String desEncode = "utf-8";   
  28.        
  29.     // 处理的文件过滤   
  30.     private static FileFilter filter = new FileFilter() {   
  31.         public boolean accept(File pathname) {   
  32.             // 只处理:目录 或是 .java文件   
  33.             if (pathname.isDirectory()   
  34.                     || (pathname.isFile() && pathname.getName().endsWith(   
  35.                             ".java")))   
  36.                 return true;   
  37.             else  
  38.                 return false;   
  39.         }   
  40.     };   
  41.        
  42.     /**  
  43.      * @param file  
  44.      */  
  45.     public static void readDir(File file)   
  46.     {   
  47.         File[] files = file.listFiles(filter);   
  48.         for (File subFile : files) {   
  49.             // 建立目标目录   
  50.             if (subFile.isDirectory()) {   
  51.                 File file3 = new File(desDir + subFile.getAbsolutePath().substring(srcDir.length()));   
  52.                 if (!file3.exists()) {   
  53.                     file3.mkdir();   
  54.                 }   
  55.                 file3 = null;   
  56.                 readDir(subFile);   
  57.             } else {   
  58.                 System.err.println("一源文件:\t"+subFile.getAbsolutePath() + "\n目标文件:\t" + (desDir + subFile.getAbsolutePath().substring(srcDir.length())));   
  59.                 System.err.println("-----------------------------------------------------------------");   
  60.                 try {   
  61.                     convert(subFile.getAbsolutePath(), desDir + subFile.getAbsolutePath().substring(srcDir.length()), srcEncode, desEncode);   
  62.                 } catch (UnsupportedEncodingException e) {   
  63.                     e.printStackTrace();   
  64.                 } catch (IOException e) {   
  65.                     e.printStackTrace();   
  66.                 }   
  67.             }   
  68.         }   
  69.     }   
  70.        
  71.     /**  
  72.      *   
  73.      * @param infile    源文件路径  
  74.      * @param outfile   输出文件路径  
  75.      * @param from  源文件编码  
  76.      * @param to    目标文件编码  
  77.      * @throws IOException  
  78.      * @throws UnsupportedEncodingException  
  79.      */  
  80.     public static void convert(String infile, String outfile, String from,   
  81.             String to) throws IOException, UnsupportedEncodingException {   
  82.         // set up byte streams   
  83.         InputStream in;   
  84.         if (infile != null)   
  85.             in = new FileInputStream(infile);   
  86.         else  
  87.             in = System.in;   
  88.         OutputStream out;   
  89.         if (outfile != null)   
  90.             out = new FileOutputStream(outfile);   
  91.         else  
  92.             out = System.out;   
  93.   
  94.         // Use default encoding if no encoding is specified.   
  95.         if (from == null)   
  96.             from = System.getProperty("file.encoding");   
  97.         if (to == null)   
  98.             to = System.getProperty("file.encoding");   
  99.   
  100.         // Set up character stream   
  101.         Reader r = new BufferedReader(new InputStreamReader(in, from));   
  102.         Writer w = new BufferedWriter(new OutputStreamWriter(out, to));   
  103.   
  104.         // Copy characters from input to output. The InputStreamReader   
  105.         // converts from the input encoding to Unicode,, and the   
  106.         // OutputStreamWriter   
  107.         // converts from Unicode to the output encoding. Characters that cannot   
  108.         // be   
  109.         // represented in the output encoding are output as '?'   
  110.         char[] buffer = new char[4096];   
  111.         int len;   
  112.         while ((len = r.read(buffer)) != -1)   
  113.             w.write(buffer, 0, len);   
  114.         r.close();   
  115.         w.flush();   
  116.         w.close();   
  117.     }   
  118.        
  119.   
  120.     public static void main(String[] args) {   
  121.         // 建立目标文件夹   
  122.         File desFile = new File(desDir);   
  123.         if (!desFile.exists()) {   
  124.             desFile.mkdir();   
  125.         }   
  126.         desFile = null;   
  127.   
  128.         File srcFile = new File(srcDir);   
  129.         // 读取目录 循环转换文件   
  130.         readDir(srcFile);   
  131.         srcFile = null;   
  132.     }   
  133.   
  134. }   
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics