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);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/u010904188/article/details/82177842
今日推荐