【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)

大家都在看

  • Ajax请求下载文件的解决方案

    写这个博客之前我并不清楚 ajax请求是下载不了文件的 😅 这段时间在写一个自己的项目,用到了ajax下载文件,请求到了controller层并返回文件下载成功 但是浏览器就是没有…

    数据库 2023年6月9日
    0241
  • MYSQL–>SQL语法

    注:DDL(Data definition Language)数据库定义(比如说表,数据库)DML(Data Mainpulation Language)数据库 表的增删改查DQL…

    数据库 2023年6月14日
    046
  • 记一次有意思的 SQL 实现 → 分组后取每组的第一条记录

    开心一刻 今天,我的朋友怒气冲冲地向我走来。 [En] Today, my friend came up to me angrily. 朋友:我和一个女朋友聊了三个月了。我昨天偷看…

    数据库 2023年5月24日
    0124
  • yum安装Mysql8.0

    停止MySQL service mysqld status service mysqld stop 卸载已经安装过的MySQL 检查是否已经安装 rpm -qa|grep mysq…

    数据库 2023年6月9日
    066
  • mysql的安装和下载

    1、 MySQL 下载地址为: MySQL 下载,这里下载的是mysql的msi安装文件,选择下面的470.2M的版本,点击download进行下载。 2、在下载页面直接选择: N…

    数据库 2023年5月24日
    084
  • zabbix监控用户,模组管理

    zabbix用户模组管理 用户管理 用户组 用户角色 用户 模板管理 模板组 模板 模板的监控项的参数也可以copy来 加入触发器 导出模板查看格式 posted @2022-09…

    数据库 2023年6月14日
    051
  • springboot~Cache注解缓存在代码中的获取

    对于springboot中基于方法的缓存Caching来说,我们直接以声明的方式添加,删除这些缓存,而它们在redis这种持久化产品中,通过 value::key的方法组成一个re…

    数据库 2023年6月6日
    087
  • 4_Spring

    Spring的基本组成: 1、最完善的轻量级核心框架。 2、通用的事务管理抽象层。 3、JDBC抽象层。 4、集成了Toplink, Hibernate, JDO, and iBA…

    数据库 2023年6月11日
    066
  • Idea新建一个springboot的项目

    1、 2、 3、 4、 5、新建yml文件 6、如果没有这个yml文件没有变成绿叶标的话 如下操作添加即可 一般过一会就好了 Original: https://www.cnblo…

    数据库 2023年6月9日
    089
  • MySQL的B+树索引和hash索引的区别

    简述一下索引: 索引是数据库表中一列或多列的值进行排序的一种数据结构;索引分为聚集索引和非聚集索引,聚集索引查询类似书的目录,快速定位查找的数据,非聚集索引查询一般需要再次回表查询…

    数据库 2023年5月24日
    079
  • Windows 装机必备

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    数据库 2023年6月6日
    071
  • 代码圈复杂度

    回到我们日常的写代码的场景,我们一直在说系统很复杂,那到底什么是系统复杂度呢?最近几天,一直在改项目里别人写的代码,某些方法复杂无注释。怎么才能写的一手可读,可扩展,可维护[注1]…

    数据库 2023年6月14日
    085
  • PDF转换OFD(Java实用版)

    前言: 在项目中用到了,就写一下哈 OFD简介 百度百科:https://baike.baidu.com/item/OFD/56227163?fr=aladdin OFD(Open…

    数据库 2023年6月16日
    0119
  • 2022-9-1 异步请求

    异步请求 ajax:异步刷新(局部刷新),前端技术。给后台发请求。异步:整个页面不会全部刷新,只有某个局部在刷新。验证用户名是否存在。刷新: 1.原生js的ajax get 请求 …

    数据库 2023年6月14日
    083
  • JSP中的JSTL 标签库

    JSTL 标签库 JSTL 标签库的使用步骤 core 核心库使用 JSTL 标签库 JSTL 标签库 全称是指 JSP Standard Tag Library JSP 标准标签…

    数据库 2023年6月11日
    098
  • 做数据时代的加油站,ShardingSphere 为易车数据库架构演进提供新动力

    Apache ShardingSphere 前段时间应邀来到易车北京总部,PMC Chair 张亮与易车的技术同学在数据加解密、扩容、迁移、上云等话题展开了深度交流与探讨。 作为中…

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