今日思语:春风很柔,夏风很烈,秋风清爽,东风凛冽,愿你就是春夏秋冬的风~

平时对一些文件进行操作,比如说写文件,读文件,复制一个文件等,使用原生File操作需要读取源文件,生成流对象,再写入一个新的文件中一系列过程,使用apache commons-io帮我们封装了这些实现,有些操作可以很容易的使用它的api来实现。这里使用2.6版本,javadoc参照commons-io-2.6

1、pom依赖加入commons-io

  1. <dependency>
  2. <groupId>commons-io</groupId>
  3. <artifactId>commons-io</artifactId>
  4. <version>2.6</version>
  5. </dependency>

2、常用API使用

2.1 获取文件

  1. File fileA = FileUtils.getFile(testPath + "a.txt");
  2. // 最终路径为入参拼接起来即testPath + "a.txt"
  3. File fileAA = FileUtils.getFile(testPath, "a.txt");
  4. // 获取某个目录下的文件,后面参数是拼接而成的
  5. File fileAAA = FileUtils.getFile(new File(testPath), "a.txt");

2.2 获取临时目录和用户目录

  1. // 获取临时目录路径
  2. // 每种操作系统有所不同,Windows一般是C:\DOCUME~1\用户~1\LOCALS~1\Temp,Solaris一般是:/var/tmp/,Linux和Mac OS X一般是:/tmp
  3. // Windows的java.io.tmpdir属性值可以看环境变量->用户变量中的TMP。
  4. File tempDirectory = FileUtils.getTempDirectory();
  5. String tempDirectoryPath = FileUtils.getTempDirectoryPath();
  6. File userDirectory = FileUtils.getUserDirectory();
  7. String userDirectoryPath = FileUtils.getUserDirectoryPath();
  8. System.out.println(tempDirectoryPath + " - " + tempDirectory);
  9. System.out.println(userDirectoryPath + " - " + userDirectory.getName());

2.3  创建文件

  1. // 创建文件(实现与Unix上“ touch”实用程序相同的行为。它会创建一个大小为0的新文件,或者如果文件已经存在,则将其打开和关闭而不进行修改,而是更新文件的日期和时间。)
  2. File fileD = new File(testPath + "d.txt");
  3. FileUtils.touch(fileD);

2.4 写内容到文件

  1. // 写文件
  2. File fileB = new File(testPath + "b.txt");
  3. if (!fileB.exists()) {
  4. fileB.createNewFile();
  5. }
  6. // 通过字节写入文件
  7. FileUtils.writeByteArrayToFile(fileB, "Hello, smile".getBytes());
  8. FileUtils.writeByteArrayToFile(fileB, "Hello, sunshine".getBytes(), true);
  9. // 通过行写入文件(覆盖)
  10. FileUtils.writeLines(fileB, Lists.newArrayList("春夏秋冬, 三餐四季,只愿有你"));
  11. // 通过行写入文件(追加)
  12. FileUtils.writeLines(fileB, Lists.newArrayList("春风很柔,夏风很烈,秋风清爽,东风凛冽,你就是春夏秋冬的风"), true);
  13. // 字符串写入,不换行追加
  14. FileUtils.writeStringToFile(fileB, "唯美有你", "UTF-8", true);
  15. FileUtils.writeStringToFile(fileB, "哪里有你", Charset.defaultCharset(), true);
  16. File fileC = new File(testPath + "c.txt");
  17. if (!fileC.exists()) {
  18. fileC.createNewFile();
  19. }
  20. // 流操作
  21. fileInputStream = FileUtils.openInputStream(fileB);
  22. // fileOutputStream = FileUtils.openOutputStream(fileC);
  23. fileOutputStream = FileUtils.openOutputStream(fileC, true);
  24. // 字节数组
  25. byte[] buffer = new byte[1024];
  26. // 将文件内容写到文件中
  27. while (fileInputStream.read(buffer) != -1) {
  28. fileOutputStream.write(buffer);
  29. }

2.5 读取文件内容

  1. // 按行读取文件内容
  2. List list = FileUtils.readLines(fileAAA, "UTF-8");
  3. System.out.println(list.size() > 0 ? list.get(0) : "" + list.size());
  4. List<String> lines = FileUtils.readLines(fileB, Charset.defaultCharset());
  5. System.out.println(lines.size() > 0 ? lines.get(0) : "" + lines.size());
  6. // 读取文件内容为字节
  7. byte[] bytes = FileUtils.readFileToByteArray(fileB);
  8. System.out.println(new String(bytes));
  9. // 读取文件为String
  10. String fileToString = FileUtils.readFileToString(fileB, "UTF-8");
  11. System.out.println(fileToString);
  12. String fileToString2 = FileUtils.readFileToString(fileB, Charset.defaultCharset());
  13. System.out.println(fileToString2);

2.6 获取目录文件及目录

  1. // recursive是否递归查询,这里查询.txt文件,也可以指定其他格式的,如果extensions为null则查询所有类型的文件
  2. Collection<File> listFiles = FileUtils.listFiles(new File(testPath), null, true);
  3. Collection<File> listFiles2 = FileUtils.listFiles(new File(testPath), new String[]{"txt"}, true);
  4. // 获取某个目录下的所有文件 TrueFileFilter.INSTANCE表示匹配所有的
  5. Collection<File> files1 = FileUtils.listFiles(new File(testPath), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);
  6. // 获取某个目录下的所有文件和文件目录 TrueFileFilter.INSTANCE表示匹配所有的
  7. Collection<File> files2 = FileUtils.listFilesAndDirs(new File(testPath), TrueFileFilter.INSTANCE, TrueFileFilter.INSTANCE);

2.7 文件内容比较

  1. // 文件内容比较
  2. boolean aa = FileUtils.contentEquals(fileA, fileAA);
  3. boolean ab = FileUtils.contentEquals(fileA, fileB);

2.8 文件或目录拷贝

  1. // 文件复制,将文件A的内容复制给文件D
  2. FileUtils.copyFile(fileA, fileD);
  3. // 把文件复制到某个目录下
  4. FileUtils.copyFileToDirectory(fileD, new File(testPath + "inner"));
  5. // 把某个目录拷贝到另外一个目录
  6. FileUtils.copyDirectoryToDirectory(new File(testPath + "inner"), new File(testPath + "other"));
  7. // 把文件或目录拷贝到指定目录
  8. FileUtils.copyToDirectory(fileB, new File(testPath + "inner"));
  9. // 文件目录复制
  10. FileUtils.copyDirectory(new File(testPath + "inner"), new File(testPath + "first"));

2.9 文件或目录删除

  1. // 删除目录
  2. FileUtils.deleteDirectory(new File(testPath + "first"));
  3. // 删除文件或目录
  4. FileUtils.deleteQuietly(fileD);
  5. FileUtils.deleteQuietly(new File(testPath + "first"));

以上是FileUtils工具类的一些常用操作API使用

Github源码参照

使用apache 的FileUtils处理文件的复制等操作的更多相关文章

  1. 【转载】 C#通过File类实现文件拷贝复制的功能

    在Windows系统的使用过程中,一个较常使用的功能就是文件的复制拷贝操作,其实在C#开发中,也可以使用File类库中的Copy方法来实现文件的拷贝,支持设定原文件地址,以及拷贝复制后的文件存放路径. ...

  2. Apache Camel继承Spring Boot 实现文件远程复制和转移

    pom.xml <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-f ...

  3. 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据

    1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...

  4. Java基础-输入输出-3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。

    3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc. try { FileInputStream in = ...

  5. java 7中文件的复制移动

    在java 7 中文件移动复制简单方法 文件移动 Path source=Paths.get("D:\\sa\\123.txt"); Path target=Paths.get(& ...

  6. 两台Linux主机之间文件的复制

    使用scp命令可以实现两台Linux主机之间的文件复制,基本格式是: scp [可选参数] file_source file_target 1. 复制文件 命令格式: scp local_file r ...

  7. java文件和文件夹复制、删除、移动操作

    java文件和文件夹复制.删除.移动操作 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS ...

  8. linux下文件的复制、移动与删除

    linux下文件的复制.移动与删除命令为:cp,mv,rm 一.文件复制命令cp     命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination)      ...

  9. python中文件的复制

    python中文件的复制 python的os模块有很多文件目录相关的函数,但没有提供直接复制文件的函数,当然可以通过边都边写的方式复制文件.想要直接复制文件可以通过shutil模块 shutil模块是 ...

随机推荐

  1. SQL Server 10分钟理解游标

    概述 游标是邪恶的! 在关系数据库中,我们对于查询的思考是面向集合的.而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服. 正常面向集合的思维方式 ...

  2. springboot WebMvcConfigurer配置静态资源和解决跨域

    前言 虽然现在都流行前后端分离部署,但有时候还是需要把前端文件跟后端文件一起打包发布,这就涉及到了springboot的静态资源访问的问题.不单只是静态资源打包,比如使用本地某个目录作为文件存储,也可 ...

  3. Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点)

    Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点) 一丶Django的静态文件配置 #we ...

  4. python基础知识(一)

    Python基础知识 计算基础知识 1.cpu 人类的大脑 运算和处理问题 2.内存 临时存储数据 断电就消失了 3.硬盘 永久存储数据 4.操作系统 调度硬件设备之间数据交互 python的应用和历 ...

  5. python基础04day

    一 引子 数据类型 用途 定义方式 是否多项 有/无序 可/不可变 对应状态 数字     否 —— 不可   字符串    “”‘’“““””” 否 有 不可   列表    [] 是 有 可  同 ...

  6. python day 22 CSS拾遗之箭头,目录,图标

    目录 day 4 learn html 1. CSS拾遗之图标 2. html文件的目录结构 3. CSS拾遗之a包含标签 4. CSS拾遗之箭头画法 day 4 learn html 2019/11 ...

  7. jquery问题,如何调用带this的函数?

    这样写: 1 2 3 4 5 6 7 8 9 10 11 12 $(".aa").on("mouseout",function(){     var obj = ...

  8. Qt Graphics-View的打印功能实现

    本文来研究一下Qt Graphics-View的打印功能实现. 在Qt的官方文档中介绍了Graphics-View的打印相关内容. Qt中对打印的支持是有一个独立的printsupport模块来完成的 ...

  9. 英特尔加速 Android 应用

    下载地址 https://software.intel.com/zh-cn/android https://github.com/intel/haxm 解压目录 双击.exe,安装即可 检查SDK M ...

  10. iOS UILanel 一些小实用

    UILabel *lab=[[UILabel alloc]initWithFrame:self.view.bounds]; //合并 lab.text=[NSString stringWithForm ...