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

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

1、pom依赖加入commons-io

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

2、常用API使用

2.1 获取文件

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

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

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

2.3  创建文件

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

2.4 写内容到文件

// 写文件
File fileB = new File(testPath + "b.txt");
if (!fileB.exists()) {
fileB.createNewFile();
}
// 通过字节写入文件
FileUtils.writeByteArrayToFile(fileB, "Hello, smile".getBytes());
FileUtils.writeByteArrayToFile(fileB, "Hello, sunshine".getBytes(), true);
// 通过行写入文件(覆盖)
FileUtils.writeLines(fileB, Lists.newArrayList("春夏秋冬, 三餐四季,只愿有你"));
// 通过行写入文件(追加)
FileUtils.writeLines(fileB, Lists.newArrayList("春风很柔,夏风很烈,秋风清爽,东风凛冽,你就是春夏秋冬的风"), true);
// 字符串写入,不换行追加
FileUtils.writeStringToFile(fileB, "唯美有你", "UTF-8", true);
FileUtils.writeStringToFile(fileB, "哪里有你", Charset.defaultCharset(), true);
File fileC = new File(testPath + "c.txt");
if (!fileC.exists()) {
fileC.createNewFile();
}
// 流操作
fileInputStream = FileUtils.openInputStream(fileB);
// fileOutputStream = FileUtils.openOutputStream(fileC);
fileOutputStream = FileUtils.openOutputStream(fileC, true);
// 字节数组
byte[] buffer = new byte[1024];
// 将文件内容写到文件中
while (fileInputStream.read(buffer) != -1) {
fileOutputStream.write(buffer);
}

2.5 读取文件内容

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

2.6 获取目录文件及目录

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

2.7 文件内容比较

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

2.8 文件或目录拷贝

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

2.9 文件或目录删除

// 删除目录
FileUtils.deleteDirectory(new File(testPath + "first"));
// 删除文件或目录
FileUtils.deleteQuietly(fileD);
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. JVM一些问题

    1. 类的实例化顺序,比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序 答:先静态.先父后子. 先静态:父静态 > 子静态 优先级:父类 > 子类 静态代码块 ...

  2. docker image 镜像导入导出

    docker image save -o webv6.tar techcn/noble.web:v6docker image load -i webv6.tar -q

  3. Java学习:线程实现方式

    线程实现方式 并发与并行 并发:指两或多个事件在同一个时间段内发生 并行:指两或多个事件在同一个时刻发生(同时发生) 进程的概念 内存:所有的应用程序都需要进入到内存中执行 临时存储RAM 硬盘:永久 ...

  4. Java学习:单列集合Collection

    集合 学习集合的目标: 会使用集合存储数据 会遍历集合,把数据取出来 掌握每种集合的特性 集合和数组的区别 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型 ...

  5. Oracle学习笔记(五)

    如何查询硬解析问题: --捕获出需要使用绑定变量的SQL drop table t_bind_sql purge; create table t_bind_sql as select sql_text ...

  6. 汉诺(hanio)塔问题

    规则:大盘子不能压在小盘子上.要求:将A柱子上所有盘(每个盘大小不同)放到C柱子上,使用B柱子作辅助. 比如柱子A上有n个盘,执行以下步骤: 1. 把n-1个盘从源柱移动到临时柱上: 2. 把源柱上剩 ...

  7. C# Winform 打印控件PrintDocument

    由于本着节约的原则,这里的打印都只是保存为.oxps格式的文件. 在我调试时每次打印完成后,窗体都会自己闪退. 在网上并没有相关资料,经过加入断点确认问题在 private void btnPrint ...

  8. NET 实例化泛形对象并赋值

    1.泛形方法:具体实例点击查看BuilderResultList /// <summary> /// 实例化泛形对象并赋值 /// </summary> /// <typ ...

  9. C#多线程解决程序卡顿问题

    描述: 在 C# 中,System.Threading.Thread 类用于线程的工作.它允许创建并访问多线程应用程序中的单个线程.进程中第一个被执行的线程称为主线程. 案例: static void ...

  10. 在浏览器中输入 url 地址到显示主页的过程

    总体来说分为以下几个过程:1. DNS 解析2. TCP 连接3. 发送 HTTP 请求4. 服务器处理请求并返回 HTTP 报文5. 浏览器解析渲染页面6. 连接结束