【Java基础】– FileUtils工具类常用方法

1.FileUtils介绍

文件IO是我们日常项目中经常使用到的基础API,常见的IO读写操作基础类字节流InputStream与OutputStream、字符流Reader与Writer已经涵盖了我们日常项目开发中的常见API功能。具体的基础回顾可以参见一篇cdsn博文:字符流与字节流的区别

今天要说的,是我们基于上述API由Apache开源项目封装的一个更好用的文件操作工具类 FileUtils,涵盖了读取文件、拷贝文件、拷贝目录及文件、删除目录及文件、清除目录等比较常用的静态类封装。

FileUtils的使用需要引入apache的commons-io包下的FileUtils,导入:import org.apache.commons.io.FileUtils;

官方API文档:http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html

maven项目使用需要导入依赖:

<dependency>
    <groupId>commons-fileuploadgroupId>
    <artifactId>commons-fileuploadartifactId>
    <version>1.3.3version>
dependency>

下面简单介绍一下它常见的API方法的使用。

1.1.读取文件

官方API中我觉得能使用到的就是下面的方法,都是静态方法,如readFileToString、readLines(按行读取)等,对应的静态方法也都提供了支持编码”utf-8″格式读取。

【Java基础】-- FileUtils工具类常用方法

1.2.拷贝文件

比较常用的API方法如下,如copyFile、copyInputStreamToFile、copyFileToDirectory。

【Java基础】-- FileUtils工具类常用方法

拷贝文件到文件<a href="http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#copyFile-java.io.File-java.io.File-" rel="noopener">copyFile</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" rel="noopener">File</a>&#xA0;srcFile,&#xA0;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" rel="noopener">File</a>&#xA0;destFile)

File file = new File("E:\\java\\file01\\abc雪.jpg");
String destFilePath = "E:\\java\\file02";
String destFileName = "abc雪02.jpg";
try {
    FileUtils fileUtils = new FileUtils();
    //文件拷贝到新的位置并保存文件的日期。
    fileUtils.copyFile(file, new File(destFilePath,destFileName));
    System.out.println("文件拷贝成功");
} catch (IOException e) {
    e.printStackTrace();
    System.out.println(e.getMessage());
}

拷贝文件到字节输出流copyFile(File input, OutputStream output)

String destFileName = "abc雪03.jpg";
//从文件copy to an字节输出流。
FileUtils.copyFile(file, new FileOutputStream(new File(destFilePath,destFileName)));

拷贝文件到文件的目录保存文件的日期copyFileToDirectory(File srcFile, File destDir)

拷贝的文件名无法自定义,和原文件名一样

//拷贝文件到文件的目录保持文件的日期。
FileUtils.copyFileToDirectory(file, new File(destFilePath));

【Java基础】-- FileUtils工具类常用方法

1.3.拷贝目录及文件

主要的API如下,包含拷贝目录及目录下的子目录及文件的拷贝方法:

【Java基础】-- FileUtils工具类常用方法

将整个目录拷贝到新位置,并保持原文件日期<a href="http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#copyDirectory-java.io.File-java.io.File-" rel="noopener">copyDirectory</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" rel="noopener">File</a>&#xA0;srcDir,&#xA0;<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" rel="noopener">File</a>&#xA0;destDir)

其包含文件及子目录文件并保持原文件日期

File file = new File("E:\\java\\file01");
String destFilePath = "E:\\java\\file03";
try {
    //将整个目录复制新位置,并保持原文件日期。
    FileUtils.copyDirectory(file, new File(destFilePath));
    System.out.println("文件目录拷贝成功");
} catch (IOException e) {
    e.printStackTrace();
    System.out.println(e.getMessage());
}

【Java基础】-- FileUtils工具类常用方法

将已筛选的目录拷贝到新位置

copyDirectory(File srcDir, File destDir, FileFilter filter)

文件过滤器筛选其包含文件及子目录文件拷贝,并保持原文件日期。

String destFilePath = "E:\\java\\file04";
//将已筛选的目录复制,并保持原文件日期的新位置。
FileUtils.copyDirectory(file, new File(destFilePath), new FileFilter() {
    @Override
    public boolean accept(File pathname) {
        if(pathname.isDirectory()) return true;
        else {
            boolean b1 = pathname.getName().endsWith(".txt");
            boolean b2 = pathname.getName().endsWith(".jpg");
            return b1 || b2;
        }
    }
});

【Java基础】-- FileUtils工具类常用方法

1.4.删除目录及文件

主要的删除API方法如下,常用的有deleteDirectory、deleteQuietly及forceDelete等,主要用于级联删除及强制删除,且不会引起异常。非常强力。

【Java基础】-- FileUtils工具类常用方法

删除指定文件,从不引发异常deleteQuietly(File file)

File file = new File("E:\\java\\file04\\abc雪.jpg");
//删除指定文件,从不引发异常。
FileUtils.deleteQuietly(file);

删除指定文件,文件不存在抛出异常forceDelete(File file)

File file = new File("E:\\java\\file04\\abc雪.jpg");
try {
    FileUtils.forceDelete(file);
    System.out.println("操作成功");
} catch (IOException e) {
    e.printStackTrace();
    System.out.println(e.getMessage());
}

递归删除目录<a href="http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#deleteDirectory-java.io.File-" rel="noopener">deleteDirectory</a>(<a href="http://docs.oracle.com/javase/7/docs/api/java/io/File.html?is-external=true" rel="noopener">File</a>&#xA0;directory)

&#x5220;&#x9664;其包含文件及子目录文件

File file = new File("E:\\java\\file04\\abc雪.jpg");
//递归删除目录。
try {
    FileUtils.deleteDirectory(new File(destFilePath));
    System.out.println("操作成功");
} catch (IOException e) {
    e.printStackTrace();
    System.out.println(e.getMessage());
}

1.5.清除目录

主要的API如下,主要用于清除当前目录下(不会删除到当前目录级别)的文件夹及其包含的文件。

【Java基础】-- FileUtils工具类常用方法

清除该目录下的文件及子目录文件而不删除该目录文件夹。该目录不存在会报错:

String destFilePath = "E:\\java\\file04";
try {
    FileUtils.cleanDirectory(new File(destFilePath));
    System.out.println("操作成功");
} catch (IOException e) {
    e.printStackTrace();
    System.out.println(e.getMessage());
}

1.6.文件大小计数常量

①EMPTY_FILE_ARRAY,空文件数组:

【Java基础】-- FileUtils工具类常用方法
/**
   * An empty array of type {@code File}.

   */
public static final File[] EMPTY_FILE_ARRAY = {};

②1GB大小,分别对应long类型及BigInteger包装类型:

【Java基础】-- FileUtils工具类常用方法
/**
   * The number of bytes in a gigabyte.

   */
public static final long ONE_GB = ONE_KB * ONE_MB;

 /**
    * The number of bytes in a gigabyte.

    *
    * @since 2.4
    */
public static final BigInteger ONE_GB_BI = ONE_KB_BI.multiply(ONE_MB_BI);

③同理KB与MB的显示类型:

【Java基础】-- FileUtils工具类常用方法
/**
     * The number of bytes in a kilobyte.

     */
public static final long ONE_KB = 1024;

/**
   * The number of bytes in a kilobyte.

   *
   * @since 2.4
   */
public static final BigInteger ONE_KB_BI = BigInteger.valueOf(ONE_KB);

/**
   * The number of bytes in a megabyte.

   */
public static final long ONE_MB = ONE_KB * ONE_KB;

博文转载至CSDN博客:

FileUtils工具类常用方法

基于博主博文我自己做了一小部分的知识补充,也非常感谢博主提供博文分享学习知识的平台。

站在巨人的肩膀上,我们才能学到更多的知识~

Original: https://www.cnblogs.com/yif0118/p/15491154.html
Author: 人无名,则可专心练剑
Title: 【Java基础】– FileUtils工具类常用方法

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/575927/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 设计模式之工厂方法

    一、工厂方法:简单工厂违背了单一职责原则,而且不利于扩展,于是衍生了工厂方法模式,该模式能很好地解决对扩展开放、对修改关闭的需求。 二、实现思路 :对每一个对象都创建一个对应的工厂…

    数据库 2023年6月14日
    0124
  • 0x02MySQL权限管理

    0x02MySQL权限管理 工具/原料 MySQL5728,centos7 方法/步骤 1.1 数据库的介绍 你们公司用了哪些数据产品? 请你例举一下你熟悉的数据库产品? 我们公司…

    数据库 2023年6月9日
    076
  • 程序员“迷惑代码”大赏

    谈到程序员,对于外行人来说一贯的印象就是格子衫大裤衩外加人字拖,蓬头(秃头)垢面黑眼圈,还有就是”人傻钱多死得快”🤣,这是外界对程序员固有的思想,但是作为新…

    数据库 2023年6月11日
    099
  • SQL函数-聚合函数

    聚合函数 聚合函数是对一组数据进行汇总输出的函数。 输入:一组数据集合输出:单个值 举例:返回一组数据的最大值、平均数、最小、方差等操作。 常见函数举例: 1,AVG函数:返回一组…

    数据库 2023年6月16日
    097
  • Goroutines (一)

    Goroutines CSP communicating sequential processes Go 语言中,每一个并发执行单元叫做一个goroutine,语法上仅需要在一个普…

    数据库 2023年6月16日
    091
  • MySQL查询性能优化七种武器之索引潜水

    有读者可能会一脸懵逼? 啥是 索引潜水? 你给它起名字了吗?你有指数蛙泳吗? [En] Did you give it the name? Do you have index br…

    数据库 2023年5月24日
    0105
  • C/C++内存泄漏检测方法

    内存泄漏 检测代码 使用链表记录每个malloc返回的指针,释放时从链表中查找并删除找到对应指针的节点。 最终输出链表,该链表记录了所有没有释放的动态内存。 #include #i…

    数据库 2023年6月14日
    087
  • CentOS服务器的网络配置与部署

    1.系统安装与软件安装 1.1选择CentOs7.9release版本用作所研发系统部署服务器,官网以及所选择镜像为地址为:http://ftp.sjtu.edu.cn/cento…

    数据库 2023年6月6日
    099
  • 需求评审,测试人员应该发挥怎样的价值?两分钟让你不再懵逼

    转载请注明出处❤️ 你好,我是测试蔡坨坨。 前些日与朋友聊天,谈及需求评审,作为测试人员,我们应该在需求评审会议上做些什么? 记得第一次参加需求评审,傻傻的过去坐着,然后听别人巴拉…

    数据库 2023年6月11日
    093
  • 设计模式遵循的设计原则

    一、什么是设计原则? 答:如果说设计模式是编写代码的一种套路,那么设计原则就是用来约束我们使用这种套路应该要遵循的规则,只有遵循了这些规则的设计模式编写出来的应用程序才具有更好的扩…

    数据库 2023年6月14日
    086
  • Vue自定义组件实现v-model指令

    Tips: 本文所描述的Vue均默认是Vue2版本 在我们初次接触 Vue的时候,一定会了解到一个语法糖,那就是 v-model指令,它带给我们的第一印象就是它可以实现双向绑定 那…

    数据库 2023年6月11日
    086
  • Java学习-第一部分-第二阶段-第四节:常用类

    常用类 笔记目录:(https://www.cnblogs.com/wenjie2000/p/16378441.html) 包装类 包装类的分类 针对八种基本数据类型相应的引用类型…

    数据库 2023年6月11日
    0110
  • Java绘图基础

    Graphics 绘图类 Graphic是一个抽象的画笔对象,可以在组件上绘制丰富多彩的几何图形和位图。Graphics类封装了Java支持的基本绘图操作所需的属性,主要包括 颜色…

    数据库 2023年6月16日
    088
  • java面试题总结

    1,集合类面试题 arraylist和linkedlist的区别?底层实现?手写实现?线程安全吗以及原因? hashmap的底层实现?put()执行过程?put null时的执行过…

    数据库 2023年6月11日
    093
  • 如何成为一名开发人员——第 2 部分:非技术技能

    在第一部分中,我提到了成为开发人员所涉及的技术技能。现在我要谈一些非技术性的技能。 4 学会沟通 编程归根结底是将人类思想转化为机器逻辑的艺术。因此,一半的工作在于理解和表达人类思…

    数据库 2023年6月14日
    0105
  • xtrabackup2版本和xtrabackup8版本对比

    导语在使用xtrabackup8版本对mysql8版本进行备份恢复搭建从库的时候,继续使用xtrabackup2版本的方式,从xtrabackup_binlog_info 文件中找…

    数据库 2023年6月16日
    0128
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球