读书人

拷贝文件夹包括资料的转码

发布时间: 2012-10-28 09:54:44 作者: rapoo

拷贝文件夹,包括文件的转码。

程序背景:有一个源代码的包,但是编码是UTF-8,由于我的环境很多工程老师GBK,为了统一,写了下面的一个小程序来实现从UTF-8到GBK的转换。

?

程序代码如下:其中运用了apache的两个包,分别是commons-io-2.0.jar和commons-lang-2.5.jar

?

package io.apache;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.UnsupportedEncodingException;import java.util.Properties;import org.apache.commons.io.FileUtils;/** * @description 实现文件夹的拷贝,包括文件的转码。 * @author 大鹏 * @date 2011-3-25 */public class CopyDirEncoding {    /**     * 得到config.properties文件中的配置     * @throws IOException      */    private Properties getProperties() throws IOException {        // 获取配置信息        Properties config = new Properties();        config.load(new FileInputStream("config.properties"));        return config;    }    /**     * 中文转码     */    private String transformWord(String str) throws UnsupportedEncodingException {        return new String(str.getBytes("ISO8859-1"), "UTF-8");    }    public void run() throws IOException {        Properties prop = getProperties();        File srcFile = new File(transformWord(prop.getProperty("srcDir")));        File destFile = new File(transformWord(prop.getProperty("destDir")));        copyDirectory(srcFile, destFile, prop.getProperty("oldEncode"), prop                .getProperty("newEncode"));    }    /**     * 将某目录下的所有文件及子文件夹拷贝至另一目录,参数为File格式     * 递归遍历该文件夹     * @param srcDir     * @param destDir     * @throws IOException     */    public void copyDirectory(File srcDir, File destDir, String oldEncode, String newEncode)            throws IOException {        File[] files = srcDir.listFiles();        if (files == null) {            throw new IOException("Failed to list contents of " + srcDir);        }        if (destDir.exists()) {            if (destDir.isDirectory() == false) {                throw new IOException("Destination '" + destDir + "' exists but is not a directory");            }        }        else {            if (destDir.mkdirs() == false) {                throw new IOException("Destination '" + destDir + "' directory cannot be created");            }        }        for (File file : files) {            if (file.isDirectory()) {                File copiedFile = new File(destDir, file.getName());                // 递归调用该方法                copyDirectory(file, copiedFile, oldEncode, newEncode);            }            else {                copyFile(file, destDir, oldEncode, newEncode);            }        }    }    /**     * 实现文件转码,从UTF-8转至GBK     * @param srcFile     * @param destDir     * @param oldEncode     * @param newEncode     * @throws IOException     */    private void copyFile(File srcFile, File destDir, String oldEncode, String newEncode)            throws IOException {        File destFile = new File(destDir, srcFile.getName());        String fileData = FileUtils.readFileToString(srcFile, oldEncode);        FileUtils.writeStringToFile(destFile, fileData, newEncode);    }    public static void main(String[] args) throws Exception {        CopyDirEncoding fileUtils = new CopyDirEncoding();        fileUtils.run();    }}

?

?

?config.properties文件内容如下:

#目录既可以为相对路径,也可以为绝对路径。相对路径如com,绝对路径如D:/workspace等等#源目录srcDir = 新建文件夹/com#目标目录,如果不存在,会新建。destDir = target#转换前的编码oldEncode = UTF-8#转换后的编码newEncode = GBK

?

读书人网 >编程

热点推荐