Java文件操做加強工具

Java文件操做加強工具
 
Java的文件操做太基礎,缺少不少實用工具,好比對目錄的操做,支持就很是的差了。若是你常常用Java操做文件或文件夾,你會以爲反覆編寫這些代碼是使人沮喪的問題,並且要大量用到遞歸。
 
下面是的一個解決方案,藉助Apache Commons IO工具包來簡單實現文件(夾)的複製、移動、刪除、獲取大小等操做,沒有通過嚴格測試,發現問題了請留言給我。
 
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.io.*;

/**
* 文件工具箱
*
* @author leizhimin 2008-12-15 13:59:16
*/

public final class FileToolkit {
         private static final Log log = LogFactory.getLog(FileToolkit. class);

         /**
         * 複製文件或者目錄,複製先後文件徹底同樣。
         *
         * @param resFilePath 源文件路徑
         * @param distFolder    目標文件夾
         * @IOException 當操做發生異常時拋出
         */

         public static void copyFile(String resFilePath, String distFolder) throws IOException {
                File resFile = new File(resFilePath);
                File distFile = new File(distFolder);
                 if (resFile.isDirectory()) {
                        FileUtils.copyDirectoryToDirectory(resFile, distFile);
                } else if (resFile.isFile()) {
                        FileUtils.copyFileToDirectory(resFile, distFile, true);
                }
        }

         /**
         * 刪除一個文件或者目錄
         *
         * @param targetPath 文件或者目錄路徑
         * @IOException 當操做發生異常時拋出
         */

         public static void deleteFile(String targetPath) throws IOException {
                File targetFile = new File(targetPath);
                 if (targetFile.isDirectory()) {
                        FileUtils.deleteDirectory(targetFile);
                } else if (targetFile.isFile()) {
                        targetFile.delete();
                }
        }

         /**
         * 移動文件或者目錄,移動先後文件徹底同樣,若是目標文件夾不存在則建立。
         *
         * @param resFilePath 源文件路徑
         * @param distFolder    目標文件夾
         * @IOException 當操做發生異常時拋出
         */

         public static void moveFile(String resFilePath, String distFolder) throws IOException {
                File resFile = new File(resFilePath);
                File distFile = new File(distFolder);
                 if (resFile.isDirectory()) {
                        FileUtils.moveDirectoryToDirectory(resFile, distFile, true);
                } else if (resFile.isFile()) {
                        FileUtils.moveFileToDirectory(resFile, distFile, true);
                }
        }


         /**
         * 重命名文件或文件夾
         *
         * @param resFilePath 源文件路徑
         * @param newFileName 重命名
         * @return 操做成功標識
         */

         public static boolean renameFile(String resFilePath, String newFileName) {
                String newFilePath = StringToolkit.formatPath(StringToolkit.getParentPath(resFilePath) + "/" + newFileName);
                File resFile = new File(resFilePath);
                File newFile = new File(newFilePath);
                 return resFile.renameTo(newFile);
        }

         /**
         * 讀取文件或者目錄的大小
         *
         * @param distFilePath 目標文件或者文件夾
         * @return 文件或者目錄的大小,若是獲取失敗,則返回-1
         */

         public static long genFileSize(String distFilePath) {
                File distFile = new File(distFilePath);
                 if (distFile.isFile()) {
                         return distFile.length();
                } else if (distFile.isDirectory()) {
                         return FileUtils.sizeOfDirectory(distFile);
                }
                 return -1L;
        }

         /**
         * 判斷一個文件是否存在
         *
         * @param filePath 文件路徑
         * @return 存在返回true,不然返回false
         */

         public static boolean isExist(String filePath) {
                 return new File(filePath).exists();
        }

         /**
         * 本地某個目錄下的文件列表(不遞歸)
         *
         * @param folder ftp上的某個目錄
         * @param suffix 文件的後綴名(好比.mov.xml)
         * @return 文件名稱列表
         */

         public static String[] listFilebySuffix(String folder, String suffix) {
                IOFileFilter fileFilter1 = new SuffixFileFilter(suffix);
                IOFileFilter fileFilter2 = new NotFileFilter(DirectoryFileFilter.INSTANCE);
                FilenameFilter filenameFilter = new AndFileFilter(fileFilter1, fileFilter2);
                 return new File(folder).list(filenameFilter);
        }

         /**
         * 將字符串寫入指定文件(當指定的父路徑中文件夾不存在時,會最大限度去建立,以保證保存成功!)
         *
         * @param res            原字符串
         * @param filePath 文件路徑
         * @return 成功標記
         */

         public static boolean string2File(String res, String filePath) {
                 boolean flag = true;
                BufferedReader bufferedReader = null;
                BufferedWriter bufferedWriter = null;
                 try {
                        File distFile = new File(filePath);
                         if (!distFile.getParentFile().exists()) distFile.getParentFile().mkdirs();
                        bufferedReader = new BufferedReader( new StringReader(res));
                        bufferedWriter = new BufferedWriter( new FileWriter(distFile));
                         char buf[] = new char[1024];         //字符緩衝區
                         int len;
                         while ((len = bufferedReader.read(buf)) != -1) {
                                bufferedWriter.write(buf, 0, len);
                        }
                        bufferedWriter.flush();
                        bufferedReader.close();
                        bufferedWriter.close();
                } catch (IOException e) {
                        flag = false;
                        e.printStackTrace();
                }
                 return flag;         } }
相關文章
相關標籤/搜索