apache commons IO包深入整理

概述

Apache Commons IO是Apache基金会创建并维护的Java函数库。它提供了许多类使得开发者的常见任务变得简单,同时减少重复(boiler-plate)代码,这些代码可能遍布于每个独立的项目中,你却不得不重复的编写。这些类由经验丰富的开发者维护,对各种问题的边界条件考虑周到,并持续修复相关bug。

依赖包

<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.6</version>
</dependency>

工具类

文件名工具类

FilenameUtils,包含一些工具方法,它们基于文件名工作而不是File对象。这个类旨在 在Unix和Windows环境下保持一致,帮助在两个环境下过渡(如从开发环境到生成环境)

首先看下官方定义文件名的各个部分

This class defines six components within a filename (example C:\dev\project\file.txt):

  • the prefix - C:\
  • the path - dev\project\
  • the full path - C:\dev\project\
  • the name - file.txt
  • the base name - file
  • the extension - txt

前缀是针对windows和linux系统之间的差异而进行的处理

常用功能

    private static final String EXAMPLE_TXT_PATH =
            "C:/Users/wqliu/example.txt";

  
    @Test
    public void test(){
        // 最常用    
        log.info("文件全名:{}",FilenameUtils.getName(EXAMPLE_TXT_PATH));
        log.info("文件名:{}",FilenameUtils.getBaseName(EXAMPLE_TXT_PATH));
        log.info("扩展名:{}",FilenameUtils.getExtension(EXAMPLE_TXT_PATH));
        //取路径
        log.info("路径:{}",FilenameUtils.getFullPath(EXAMPLE_TXT_PATH));
        //取路径,不含结尾分隔符
        log.info("路径,不含结尾分隔符:{}",FilenameUtils.getFullPathNoEndSeparator(EXAMPLE_TXT_PATH));


        //常用
        //将路径和文件名拼接为完整名称,自动处理间隔符问题
        log.info("路径文件名拼接:{}",FilenameUtils.concat("c:/dev","1.txt"));
        log.info("路径文件名拼接:{}",FilenameUtils.concat("c:/dev/","1.txt"));
        //注意,以下不会输出与上相同结果,原因在于linux中/代表新的路径
        log.info("路径文件名拼接:{}",FilenameUtils.concat("c:/dev","/1.txt"));
        log.info("路径文件名拼接:{}",FilenameUtils.concat("c:/dev/","/1.txt"));       

    }

输出结果

2020-04-07 13:49:17.176 [main] INFO   - 文件全名:example.txt
2020-04-07 13:49:17.185 [main] INFO   - 文件名:example
2020-04-07 13:49:17.185 [main] INFO   - 扩展名:txt
2020-04-07 13:49:17.185 [main] INFO   - 路径:C:/Users/wqliu/
2020-04-07 13:49:17.185 [main] INFO   - 路径,不含结尾分隔符:C:/Users/wqliu
2020-04-07 13:49:17.185 [main] INFO   - 路径文件名拼接:c:\dev\1.txt
2020-04-07 13:49:17.185 [main] INFO   - 路径文件名拼接:c:\dev\1.txt
2020-04-07 13:49:17.185 [main] INFO   - 路径文件名拼接:\1.txt
2020-04-07 13:49:17.185 [main] INFO   - 路径文件名拼接:\1.txt

文件工具类

FileUtils 包含一些工具类,它们基于File对象工作,包括读,写,拷贝和比较文件

复制文件夹

// 复制文件夹(文件夹里面的文件内容也会复制)
FileUtils.copyDirectory(File srcDir, File destDir)
// 复制文件夹,带有文件过滤功能
FileUtils.copyDirectory(File srcDir, File destDir, FileFilter filter)
// 以子目录的形式将文件夹复制到到另一个文件夹下
FileUtils.copyDirectoryToDirectory(File srcDir, File destDir)

复制文件

// 复制文件
FileUtils.copyFile(File srcFile, File destFile)
// 复制文件到输出流
FileUtils.copyFile(File input, OutputStream output)
// 复制文件到一个指定的目录
FileUtils.copyFileToDirectory(File srcFile, File destDir)
// 把输入流里面的内容复制到指定文件
FileUtils.copyInputStreamToFile(InputStream source, File destination)
// 把URL 里面内容复制到文件(可以下载文件)
FileUtils.copyURLToFile(URL source, File destination)

FileUtils.copyURLToFile(URL source, File destination, int connectionTimeout, int readTimeout)

写入文件

// 把字符串写入文件

FileUtils.writeStringToFile(File file, String data, String encoding)

FileUtils.writeStringToFile(File file, String data, String encoding, boolean append)

// 把字节数组写入文件

FileUtils.writeByteArrayToFile(File file, byte[] data)

FileUtils.writeByteArrayToFile(File file, byte[] data, boolean append)
FileUtils.writeByteArrayToFile(File file, byte[] data, int off, int len)
FileUtils.writeByteArrayToFile(File file, byte[] data, int off, int len, boolean append)

// 把集合里面的内容写入文件

// encoding:文件编码,lineEnding:每行以什么结尾

FileUtils.writeLines(File file, Collection<?> lines)

FileUtils.writeLines(File file, Collection<?> lines, boolean append)

FileUtils.writeLines(File file, Collection<?> lines, String lineEnding)

FileUtils.writeLines(File file, Collection<?> lines, String lineEnding, boolean append)

FileUtils.writeLines(File file, String encoding, Collection<?> lines)

FileUtils.writeLines(File file, String encoding, Collection<?> lines, boolean append)

FileUtils.writeLines(File file, String encoding, Collection<?> lines, String lineEnding)

FileUtils.writeLines(File file, String encoding, Collection<?> lines, String lineEnding, boolean append)

// 往文件里面写内容

FileUtils.write(File file, CharSequence data, Charset encoding)

FileUtils.write(File file, CharSequence data, Charset encoding, boolean append)

FileUtils.write(File file, CharSequence data, String encoding)

FileUtils.write(File file, CharSequence data, String encoding, boolean append)

文件夹及文件移动

// 文件夹在内的所有文件都将移动
FileUtils.moveDirectory(File srcDir, File destDir)
// 以子文件夹的形式移动到另外一个文件下
FileUtils.moveDirectoryToDirectory(File src, File destDir, boolean createDestDir)
// 移动文件
FileUtils.moveFile(File srcFile, File destFile)
// 以子文件的形式移动到另外一个文件夹下
FileUtils.moveFileToDirectory(File srcFile, File destDir, boolean createDestDir)
// 移动文件或者目录到指定的文件夹内
FileUtils.moveToDirectory(File src, File destDir, boolean createDestDir)

清空和删除文件夹

// 删除文件夹,包括文件夹和文件夹里面所有的文件
FileUtils.deleteDirectory(File directory)
// 清空文件夹里面的所有的内容
FileUtils.cleanDirectory(File directory)
// 删除,会抛出异常
FileUtils.forceDelete(File file)
// 删除,不会抛出异常
FileUtils.deleteQuietly(File file)

创建文件夹

// 创建文件夹(可创建多级)
FileUtils.forceMkdir(File directory)
// 创建文件的父级目录
FileUtils.forceMkdirParent(File file)

获取文件输入/输出流

FileUtils.openInputStream(File file)

FileUtils.openOutputStream(File file)

读取文件

// 把文件读取到字节数组
FileUtils.readFileToByteArray(File file)
// 把文件读取成字符串
FileUtils.readFileToString(File file, Charset encoding)

FileUtils.readFileToString(File file, String encoding)
// 把文件读取成字符串集合
FileUtils.readLines(File file, Charset encoding)

FileUtils.readLines(File file, String encoding)

比较文件的修改时间

FileUtils.isFileNewer(File file, Date date)

FileUtils.isFileNewer(File file, File reference)

FileUtils.isFileNewer(File file, long timeMillis)

FileUtils.isFileOlder(File file, Date date)

FileUtils.isFileOlder(File file, File reference)

FileUtils.isFileOlder(File file, long timeMillis)

文件/文件夹的遍历

FileUtils.iterateFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)

FileUtils.iterateFiles(File directory, String[] extensions, boolean recursive)

FileUtils.iterateFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)

FileUtils.lineIterator(File file)

FileUtils.lineIterator(File file, String encoding)

FileUtils.listFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)

FileUtils.listFiles(File directory, String[] extensions, boolean recursive)

FileUtils.listFilesAndDirs(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)

其他

// 判断是否是符号链接
FileUtils.isSymlink(File file)
// 判断文件夹内是否包含某个文件或者文件夹
FileUtils.directoryContains(File directory, File child)
// 获取文件或者文件夹的大小
FileUtils.sizeOf(File file)
// 获取临时目录文件
FileUtils.getTempDirectory()
// 获取临时目录路径
FileUtils.getTempDirectoryPath()
// 获取用户目录文件
FileUtils.getUserDirectory()
// 获取用户目录路径
FileUtils.getUserDirectoryPath()
// 创建文件
FileUtils.touch(File file)
// 比较两个文件内容是否相同
FileUtils.contentEquals(File file1, File file2)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学海无涯,行者无疆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值