使用apache 的FileUtils处理文件的复制等操作
今日思语:春风很柔,夏风很烈,秋风清爽,东风凛冽,愿你就是春夏秋冬的风~
平时对一些文件进行操作,比如说写文件,读文件,复制一个文件等,使用原生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处理文件的复制等操作的更多相关文章
- 【转载】 C#通过File类实现文件拷贝复制的功能
在Windows系统的使用过程中,一个较常使用的功能就是文件的复制拷贝操作,其实在C#开发中,也可以使用File类库中的Copy方法来实现文件的拷贝,支持设定原文件地址,以及拷贝复制后的文件存放路径. ...
- Apache Camel继承Spring Boot 实现文件远程复制和转移
pom.xml <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-f ...
- 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据
1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...
- Java基础-输入输出-3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc。
3.编写BinIoDemo.java的Java应用程序,程序完成的功能是:完成1.doc文件的复制,复制以后的文件的名称为自己的学号姓名.doc. try { FileInputStream in = ...
- java 7中文件的复制移动
在java 7 中文件移动复制简单方法 文件移动 Path source=Paths.get("D:\\sa\\123.txt"); Path target=Paths.get(& ...
- 两台Linux主机之间文件的复制
使用scp命令可以实现两台Linux主机之间的文件复制,基本格式是: scp [可选参数] file_source file_target 1. 复制文件 命令格式: scp local_file r ...
- java文件和文件夹复制、删除、移动操作
java文件和文件夹复制.删除.移动操作 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputS ...
- linux下文件的复制、移动与删除
linux下文件的复制.移动与删除命令为:cp,mv,rm 一.文件复制命令cp 命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination) ...
- python中文件的复制
python中文件的复制 python的os模块有很多文件目录相关的函数,但没有提供直接复制文件的函数,当然可以通过边都边写的方式复制文件.想要直接复制文件可以通过shutil模块 shutil模块是 ...
随机推荐
- DestroyImmediate和Destroy
DestroyImmediate立即对对像进行销毁并从内存中移除: Destroy销毁场景中的物体,但内存中还存在,当令它需要销毁时,只是给一个标识.而内存中它依然是存在的,只有当内存不够,或一段时间 ...
- 第十六节:Asp.Net Core中Session的使用、扩展、进程外Session
一. 简介 关于Session的原理可参照Asp.Net版本Session的文章,去查阅. 1. 普通用法 (1).通过Nuget引入[Microsoft.AspNetCore.Http]程序集,Co ...
- 宝塔webhook配合码云,本地git push 服务器自动pull
emmmm,这其实是一个很简单的一件事情,但是有很多坑,记录一下 先大概讲一下原理吧,就是每次您 push 代码后,都会给远程 HTTP URL 发送一个 POST 请求 更多说明 » 然后在宝塔这边 ...
- .NET Core程序中,如何获取和设置操作系统环境变量的值
有时候我们在.NET Core程序中需要获取和设置操作系统环境变量的值.本文演示如何使用Environment.GetEnvironmentVariable和Environment.SetEnviro ...
- framework7 下拉刷新、无限滚动
下拉刷新: html: <div class="page-content ptr-content"> <%--下拉刷新图标--%> <div clas ...
- Winform串口编程---接收数据demo(VSPD虚拟串口)
参考地址:https://blog.csdn.net/memgxingfeixiang/article/details/52513970 https://blog.csdn.net/kevin_io ...
- SQL根据指定节点ID获取所有父级节点和子级节点
--根据指定节点ID获取所有子节点-- WITH TEMP AS ( SELECT * FROM table_name WHERE Id=' --表的主键ID UNION ALL SELECT T0. ...
- docker学习之路-centos下安装docker
前言 我要在云服务器上做一个asp.net core的webapi应用,使用docker来部署应用,中间用到的任何组件包括nginx和sqlserver 2017都是用docker来装载运行,所以,这 ...
- C# Linq 使用总结
隐式类型匿名类型自动属性初始化器委托泛型泛型委托匿名方法Lambda表达式扩展方法迭代器LINQ System.Linq var arr = new[] { "c", " ...
- git 从远程克隆代码并实现分支开发,合并分支,上传本地代码到远程
首先确认你已经安装了git 1.克隆远程代码到本地的操作 git clone 地址 打开git操作命令行 鼠标右键点击 复制需要克隆的项目的地址类似下面的ssh 输入命令进行 ...