1. 程式人生 > >JAVA開發經驗(二):常用工具類2.1-IO-檔案操作類(FileUtil)

JAVA開發經驗(二):常用工具類2.1-IO-檔案操作類(FileUtil)

摘要說明:

FileUtil主要是整合Apache Commons IO庫中的FileUtils類;主要包括對檔案的屬性查詢,複製,移動,檔案讀取,刪除等

Apache Commons IO庫包含實用程式類,流實現,檔案過濾器,檔案比較器,位元組序轉換類等等

Maven依賴:

	<dependencies>
		<!-- Apache Commons IO庫包含實用程式類,流實現,檔案過濾器,檔案比較器,位元組序轉換類等等。 -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.6</version>
		</dependency>
		<!-- Apache Commons Lang,一個Java實用程式類包,用於java.lang層次結構中的類,或被認為是標準的,以證明java.lang中的存在。 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.8</version>
		</dependency>
	</dependencies>

java工具類:

FileUtil工具類主要方法如下:

  • contentEquals:判斷兩個檔案是否相同
  • isFileNewer:判斷檔案的建立日期與指定日期比較
  • listFiles:查詢目錄下檔案
  • readFileToString:讀取檔案為字串
  • readLines:讀取檔案為多行字串
  • sizeOf:查詢檔案大小
  • writeStringToFile:將一個字串寫入一個檔案建立檔案,如果不存在。
  • writeLines:將多行文字寫入檔案
  • mkdir:建立目錄或建立檔案的父目錄
  • copy:將目錄/檔案複製到目錄/檔案;可過濾;可設定儲存最新日期
  • move:將目錄/檔案移動到目錄/檔案;可過濾;可設定儲存最新日期
  • deleteFile:刪除目錄或檔案
  • deleteFilesViaPath:批量刪除檔案或目錄
  • deleteFiles:批量刪除檔案或目錄

package com.tit.taf.io.file;

import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Date;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.lang3.StringUtils;

/**
 * @模組名:taf
 * @包名:com.tit.taf.io.file
 * @類名稱: FileUtil
 * @類描述:【類描述】檔案操作類;更多可參考:http://commons.apache.org/proper/commons-io/javadocs/api-release/index.html
 * @版本:1.0
 * @建立人:cc
 * @建立時間:2018年8月27日下午1:57:54
 */

public class FileUtil {
    /***************************************************************
     * 檔案比較
     */
    /**
     * 
     * @方法名:contentEquals
     * @方法描述【方法功能描述】 判斷兩個檔案是否相同
     * @param file1 檔案1
     * @param file2 檔案2
     * @param charsetName 檔案編碼,可以為空
     * @return 是否相同
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 上午10:02:17
     * @修改人:cc
     * @修改時間:2018年8月28日 上午10:02:17
     */
    public static boolean contentEquals(File file1, File file2, String charsetName) throws IOException {
        boolean check = false;
        if (StringUtils.isBlank(charsetName)) {
            check = FileUtils.contentEquals(file1, file2);
        }
        else {
            check = FileUtils.contentEqualsIgnoreEOL(file1, file2, charsetName);
        }
        return check;
    }

    /**
     * 
     * @方法名:isFileNewer
     * @方法描述【方法功能描述】判斷檔案的建立日期與日期比較,檔案建立日期早則為false,晚為true
     * @param file 檔案
     * @param date 比較日期
     * @return 檔案建立日期早則為false,晚為true
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 上午11:23:03
     * @修改人:cc
     * @修改時間:2018年8月28日 上午11:23:03
     */
    public static boolean isFileNewer(File file, Date date) throws IOException {
        return FileUtils.isFileNewer(file, date);
    }

    /***************************************************************
     * 檔案查詢
     */
    /**
     * 
     * @方法名:listFiles
     * @方法描述【方法功能描述】 查詢目錄下檔案
     * @param directory 目錄
     * @param recursive 是否遞迴
     * @param fileFilter 檔案過濾器
     * @param dirFilter 目錄過濾器
     * @return 檔案列表
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 下午1:42:37
     * @修改人:cc
     * @修改時間:2018年8月28日 下午1:42:37
     */
    public static List < File > listFiles(File directory, boolean recursive, IOFileFilter fileFilter,
            IOFileFilter dirFilter) throws IOException {
        if (recursive) {
            return (List < File >) FileUtils.listFiles(directory, fileFilter, dirFilter);
        }
        else {
            return (List < File >) FileUtils.listFilesAndDirs(directory, fileFilter, dirFilter);
        }
    }

    /**
     * 
     * @方法名:readFileToString
     * @方法描述【方法功能描述】讀取檔案為字串
     * @param file 檔案
     * @param encoding 編碼
     * @return 檔案字串
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 下午1:47:20
     * @修改人:cc
     * @修改時間:2018年8月28日 下午1:47:20
     */
    public static String readFileToString(File file, String encoding) throws IOException {
        return FileUtils.readFileToString(file, encoding);
    }

    /**
     * 
     * @方法名:readLines
     * @方法描述【方法功能描述】讀取檔案為多行字串
     * @param file 檔案
     * @param encoding 編碼
     * @return 多行字串
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 下午1:48:32
     * @修改人:cc
     * @修改時間:2018年8月28日 下午1:48:32
     */
    public static List < String > readLines(File file, String encoding) throws IOException {
        return FileUtils.readLines(file, encoding);
    }

    /**
     * 
     * @方法名:sizeOf
     * @方法描述【方法功能描述】查詢檔案大小
     * @param file 檔案/目錄
     * @return 大小
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 下午1:55:40
     * @修改人:cc
     * @修改時間:2018年8月28日 下午1:55:40
     */
    public static Long sizeOf(File file) throws IOException {
        if (file.isDirectory()) {
            return FileUtils.sizeOf(file);
        }
        else {
            return FileUtils.sizeOfDirectory(file);
        }

    }

    /***************************************************************
     * 檔案新增
     */
    /**
     * 
     * @方法名:writeStringToFile
     * @方法描述【方法功能描述】 將一個字串寫入一個檔案建立檔案,如果不存在。
     * @param file 檔案
     * @param data 字串
     * @param encoding 編碼
     * @param append 是否追加,true則追加,false則覆蓋
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 下午2:05:01
     * @修改人:cc
     * @修改時間:2018年8月28日 下午2:05:01
     */
    public static void writeStringToFile(File file, String data, String encoding, boolean append) throws IOException {
        FileUtils.writeStringToFile(file, data, encoding, append);
    }

    /**
     * 
     * @方法名:writeLines
     * @方法描述【方法功能描述】將多行文字寫入檔案
     * @param file 檔案
     * @param encoding 編碼
     * @param lines 多行文字
     * @param lineEnding 要使用的行分隔符null是系統預設值
     * @param append 是否追加,true則追加,false則覆蓋
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 下午2:07:39
     * @修改人:cc
     * @修改時間:2018年8月28日 下午2:07:39
     */
    public static void writeLines(File file, String encoding, List < String > lines, String lineEnding, boolean append)
            throws IOException {
        if (StringUtils.isBlank(lineEnding)) {
            FileUtils.writeLines(file, encoding, lines, append);
        }
        else {
            FileUtils.writeLines(file, encoding, lines, lineEnding, append);
        }

    }

    /**
     * 
     * @方法名:mkdir
     * @方法描述【方法功能描述】建立目錄或建立檔案的父目錄
     * @param file 目錄/檔案
     * @param isFlile 是否是檔案
     * @return 檔案目錄是否建立成功
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 上午11:16:02
     * @修改人:cc
     * @修改時間:2018年8月28日 上午11:16:02
     */
    public static boolean mkdir(File file, boolean isFlile) throws IOException {
        if (isFlile) {
            FileUtils.forceMkdirParent(file);
        }
        else {
            FileUtils.forceMkdir(file);
        }
        return true;
    }

    /***************************************************************
     * 檔案修改
     */
    /**
     * 
     * @方法名:copy
     * @方法描述【方法功能描述】將目錄/檔案複製到目錄/檔案;可過濾;可設定儲存最新日期
     * @param srcDir 起始目錄/起始檔案
     * @param destDir 目的目錄/目的檔案
     * @param preserveFileDate 檔案是否儲存原日期,false儲存最新日期,true儲存元日期
     * @param filter 檔案過濾
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 上午10:15:31
     * @修改人:cc
     * @修改時間:2018年8月28日 上午10:15:31
     */
    public static void copy(File srcDir, File destDir, boolean preserveFileDate, FileFilter filter) throws IOException {
        // 從起始目錄到目的目錄
        if (srcDir.isDirectory() && destDir.isDirectory()) {
            FileUtils.copyDirectory(srcDir, destDir, filter, preserveFileDate);
        }
        // 從起始檔案到目的目錄
        else if (!srcDir.isDirectory() && destDir.isDirectory()) {
            FileUtils.copyFileToDirectory(srcDir, destDir, preserveFileDate);
        }
        // 從起始檔案到目的檔案
        else if (!srcDir.isDirectory() && !destDir.isDirectory()) {
            FileUtils.copyFile(srcDir, destDir, preserveFileDate);
        }

    }

    /**
     * 
     * @方法名:move
     * @方法描述【方法功能描述】將目錄/檔案移動到目錄/檔案;可過濾;可設定儲存最新日期
     * @param src 目錄/檔案
     * @param dest 目錄/檔案
     * @param createDestDir 是否制定建立時間
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月29日 上午9:27:48
     * @修改人:cc
     * @修改時間:2018年8月29日 上午9:27:48
     */
    public static void move(File src, File dest, boolean createDestDir) throws IOException {
        // 從起始目錄到目的目錄
        if (src.isDirectory() && dest.isDirectory()) {
            FileUtils.moveDirectoryToDirectory(src, dest, createDestDir);
        }
        // 從起始檔案到目的目錄
        else if (!src.isDirectory() && dest.isDirectory()) {
            FileUtils.moveFileToDirectory(src, dest, createDestDir);
        }
        // 從起始檔案到目的檔案
        else if (!src.isDirectory() && !dest.isDirectory()) {
            FileUtils.moveFile(src, dest);
        }

    }

    /***************************************************************
     * 檔案刪除
     */
    /**
     * 
     * @方法名:deleteFile
     * @方法描述【方法功能描述】刪除目錄或檔案
     * @param path 檔案或目錄路徑
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 上午11:04:43
     * @修改人:cc
     * @修改時間:2018年8月28日 上午11:04:43
     */
    public static void deleteFile(String path) throws IOException {
        if (path == null || "".equals(path)) {
            return;
        }
        File ftemp = null;
        try {
            ftemp = new File(path);
            FileUtils.forceDelete(ftemp);
        }
        catch (IOException e) {
            FileUtils.forceDeleteOnExit(ftemp);
        }
    }

    /**
     * 
     * @方法名:deleteFile
     * @方法描述【方法功能描述】刪除目錄或檔案
     * @param file 檔案或目錄物件
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 上午11:05:03
     * @修改人:cc
     * @修改時間:2018年8月28日 上午11:05:03
     */
    public static void deleteFile(File file) throws IOException {
        if (file == null || !file.exists()) {
            return;
        }
        try {
            FileUtils.forceDelete(file);
        }
        catch (IOException e) {
            FileUtils.forceDeleteOnExit(file);
        }
    }

    /**
     * 
     * @方法名:deleteFilesViaPath
     * @方法描述【方法功能描述】 批量刪除檔案或目錄
     * @param paths 檔案或目錄路徑
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 上午11:05:25
     * @修改人:cc
     * @修改時間:2018年8月28日 上午11:05:25
     */
    public static void deleteFilesViaPath(List < String > paths) throws IOException {
        if (paths == null || paths.size() <= 0)
            return;
        for (String path : paths) {
            FileUtil.deleteFile(path);
        }
    }

    /**
     * 
     * @方法名:deleteFiles
     * @方法描述【方法功能描述】批量刪除檔案或目錄
     * @param files 檔案或目錄物件集合
     * @throws IOException
     * @修改描述【修改描述】
     * @版本:1.0
     * @建立人:cc
     * @建立時間:2018年8月28日 上午11:05:44
     * @修改人:cc
     * @修改時間:2018年8月28日 上午11:05:44
     */
    public static void deleteFiles(List < File > files) throws IOException {
        if (files == null || files.size() <= 0)
            return;
        for (File file : files) {
            FileUtil.deleteFile(file);
        }
    }

    public static void main(String[] args) {
        File file1 = new File("d://a/1.txt");
        File file2 = new File("d://b/");
        try {
        }
        catch (Exception e) {
            System.out.println(e);
        }
    }
}