拷贝文件夹,包括文件的转码。
程序背景:有一个源代码的包,但是编码是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
?