1. package com.tw.file.util;  
  2.  
  3. import java.io.BufferedReader;  
  4. import java.io.BufferedWriter;  
  5. import java.io.File;  
  6. import java.io.FileInputStream;  
  7. import java.io.FileWriter;  
  8. import java.io.FilenameFilter;  
  9. import java.io.IOException;  
  10. import java.io.InputStreamReader;  
  11. import java.io.StringReader;  
  12. import java.io.StringWriter;  
  13.  
  14. import org.apache.commons.io.FileUtils;  
  15. import org.apache.commons.io.filefilter.AndFileFilter;  
  16. import org.apache.commons.io.filefilter.DirectoryFileFilter;  
  17. import org.apache.commons.io.filefilter.IOFileFilter;  
  18. import org.apache.commons.io.filefilter.NotFileFilter;  
  19. import org.apache.commons.io.filefilter.SuffixFileFilter;  
  20.  
  21. import com.tw.str.util.StringToolkit;  
  22.  
  23. //import org.apache.commons.io.filefilter.*;   
  24. /**  
  25.  * 对文件操作的工具类(复制,删除,移动) 需引入包commons-io-1.2.jar  
  26.  *   
  27.  * @author tw 2009-07-16  
  28.  *   
  29.  */ 
  30. public final class FileToolkit {  
  31.  
  32.     public static void main(String[] args) {  
  33.         //待测方法.....  
  34.     }  
  35.  
  36.     /**  
  37.      * 复制文件或者目录,复制前后文件完全一样。  
  38.      *   
  39.      * @author tw 2009-07-16  
  40.      * @param resFilePath  
  41.      *            源文件路径  
  42.      * @param distFolder  
  43.      *            目标文件夹  
  44.      * @IOException 当操作发生异常时抛出  
  45.      */ 
  46.     public static void copyFile(String resFilePath, String distFolder)  
  47.             throws IOException {  
  48.         File resFile = new File(resFilePath);  
  49.         File distFile = new File(distFolder);  
  50.         if (resFile.isDirectory()) { // 目录时  
  51.             FileUtils.copyDirectoryToDirectory(resFile, distFile);  
  52.         } else if (resFile.isFile()) { // 文件时  
  53.             // FileUtils.copyFileToDirectory(resFile, distFile, true);  
  54.             FileUtils.copyFileToDirectory(resFile, distFile);  
  55.         }  
  56.     }  
  57.  
  58.     /**  
  59.      * 删除一个文件或者目录  
  60.      *   
  61.      * @author tw 2009-07-16  
  62.      * @param targetPath  
  63.      *            文件或者目录路径  
  64.      * @IOException 当操作发生异常时抛出  
  65.      */ 
  66.     public static void deleteFile(String targetPath) throws IOException {  
  67.         File targetFile = new File(targetPath);  
  68.         if (targetFile.isDirectory()) {  
  69.             FileUtils.deleteDirectory(targetFile);  
  70.         } else if (targetFile.isFile()) {  
  71.             targetFile.delete();  
  72.         }  
  73.     }  
  74.  
  75.     /**  
  76.      * 移动文件或者目录,移动前后文件完全一样,如果目标文件夹不存在则创建。  
  77.      *   
  78.      * @param resFilePath  
  79.      *            源文件路径  
  80.      * @param distFolder  
  81.      *            目标文件夹  
  82.      * @IOException 当操作发生异常时抛出  
  83.      */ 
  84.     public static void moveFile(String resFilePath, String distFolder)  
  85.             throws IOException {  
  86.         File resFile = new File(resFilePath);  
  87.         File distFile = new File(distFolder);  
  88.         if (resFile.isDirectory()) {  
  89.             // FileUtils.moveDirectoryToDirectory(resFile, distFile);  
  90.         } else if (resFile.isFile()) {  
  91.             // FileUtils.moveFileToDirectory(resFile, distFile, true);  
  92.         }  
  93.     }  
  94.  
  95.     /**  
  96.      * 重命名文件或文件夹  
  97.      *   
  98.      * @param resFilePath  
  99.      *            源文件路径  
  100.      * @param newFileName  
  101.      *            重命名  
  102.      * @return 操作成功标识  
  103.      */ 
  104.     public static boolean renameFile(String resFilePath, String newFileName) {  
  105.         // 格式化路径  
  106.         String newFilePath = StringToolkit.formatPath(StringToolkit  
  107.                 .getParentPath(resFilePath)  
  108.                 + "/" + newFileName);  
  109.         File resFile = new File(resFilePath);  
  110.         File newFile = new File(newFilePath);  
  111.         return resFile.renameTo(newFile);  
  112.     }  
  113.  
  114.     /**  
  115.      * 读取文件或者目录的大小  
  116.      *   
  117.      * @param distFilePath  
  118.      *            目标文件或者文件夹  
  119.      * @return 文件或者目录的大小,如果获取失败,则返回-1  
  120.      */ 
  121.     public static long genFileSize(String distFilePath) {  
  122.         File distFile = new File(distFilePath);  
  123.         if (distFile.isFile()) {  
  124.             return distFile.length();  
  125.         } else if (distFile.isDirectory()) {  
  126.             return FileUtils.sizeOfDirectory(distFile);  
  127.         }  
  128.         return -1L;  
  129.     }  
  130.  
  131.     /**  
  132.      * 判断一个文件是否存在  
  133.      *   
  134.      * @param filePath  
  135.      *            文件路径  
  136.      * @return 存在返回true,否则返回false  
  137.      */ 
  138.     public static boolean isExist(String filePath) {  
  139.         return new File(filePath).exists();  
  140.     }  
  141.  
  142.     /**  
  143.      * 本地某个目录下的文件列表(不递归)  
  144.      *   
  145.      * @param folder  
  146.      *            ftp上的某个目录  
  147.      * @param suffix  
  148.      *            文件的后缀名(比如.mov.xml)  
  149.      * @return 文件名称列表  
  150.      */ 
  151.     public static String[] listFilebySuffix(String folder, String suffix) {  
  152.         IOFileFilter fileFilter1 = new SuffixFileFilter(suffix);  
  153.         IOFileFilter fileFilter2 = new NotFileFilter(  
  154.                 DirectoryFileFilter.INSTANCE);  
  155.         FilenameFilter filenameFilter = new AndFileFilter(fileFilter1,  
  156.                 fileFilter2);  
  157.         return new File(folder).list(filenameFilter);  
  158.     }  
  159.  
  160.     /**  
  161.      * 将字符串写入指定文件(当指定的父路径中文件夹不存在时,会最大限度去创建,以保证保存成功!)  
  162.      *   
  163.      * @param res  
  164.      *            原字符串  
  165.      * @param filePath  
  166.      *            文件路径  
  167.      * @return 成功标记  
  168.      */ 
  169.     public static boolean string2File(String res, String filePath) {  
  170.         boolean flag = true;  
  171.         BufferedReader bufferedReader = null;  
  172.         BufferedWriter bufferedWriter = null;  
  173.         try {  
  174.             File distFile = new File(filePath);  
  175.             if (!distFile.getParentFile().exists()) {// 不存在时创建  
  176.                 distFile.getParentFile().mkdirs();  
  177.             }  
  178.             bufferedReader = new BufferedReader(new StringReader(res));  
  179.             bufferedWriter = new BufferedWriter(new FileWriter(distFile));  
  180.             char buf[] = new char[1024]; // 字符缓冲区  
  181.             int len;  
  182.             while ((len = bufferedReader.read(buf)) != -1) {  
  183.                 bufferedWriter.write(buf, 0, len);  
  184.             }  
  185.             bufferedWriter.flush();  
  186.             bufferedReader.close();  
  187.             bufferedWriter.close();  
  188.         } catch (IOException e) {  
  189.             flag = false;  
  190.             e.printStackTrace();  
  191.         }  
  192.         return flag;  
  193.     }  
  194.  
  195.     /**  
  196.      * 文本文件转换为指定编码的字符串  
  197.      *   
  198.      * @param file  
  199.      *            文本文件  
  200.      * @param encoding  
  201.      *            编码类型 没有编码方式,传入NULL既可,将使用默认的编码方式  
  202.      * @return 转换后的字符串  
  203.      * @throws IOException  
  204.      */ 
  205.     public static String file2String(File file, String encoding) {  
  206.         InputStreamReader reader = null;  
  207.         StringWriter writer = new StringWriter();  
  208.         try {  
  209.             if (encoding == null || "".equals(encoding.trim())) {  
  210.                 reader = new InputStreamReader(new FileInputStream(file),  
  211.                         encoding);  
  212.             } else {  
  213.                 reader = new InputStreamReader(new FileInputStream(file));  
  214.             }  
  215.             // 将输入流写入输出流  
  216.             char[] buffer = new char[1024*1024];  
  217.             int n = 0;  
  218.             while (-1 != (n = reader.read(buffer))) {  
  219.                 writer.write(buffer, 0, n);  
  220.             }  
  221.         } catch (Exception e) {  
  222.             e.printStackTrace();  
  223.             return null;  
  224.         } finally {  
  225.             if (reader != null) {  
  226.                 try {  
  227.                     reader.close();  
  228.                 } catch (IOException e) {  
  229.                     e.printStackTrace();  
  230.                 }  
  231.             }  
  232.         }  
  233.         // 返回转换结果  
  234.         if (writer != null)  
  235.             return writer.toString();  
  236.         else 
  237.             return null;  
  238.     }  
  239.  
  240. }