使用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模块是 ...
随机推荐
- SQL Server 10分钟理解游标
概述 游标是邪恶的! 在关系数据库中,我们对于查询的思考是面向集合的.而游标打破了这一规则,游标使得我们思考方式变为逐行进行.对于类C的开发人员来着,这样的思考方式会更加舒服. 正常面向集合的思维方式 ...
- springboot WebMvcConfigurer配置静态资源和解决跨域
前言 虽然现在都流行前后端分离部署,但有时候还是需要把前端文件跟后端文件一起打包发布,这就涉及到了springboot的静态资源访问的问题.不单只是静态资源打包,比如使用本地某个目录作为文件存储,也可 ...
- Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点)
Django---静态文件配置,post提交表单的csrf问题(日后细说),创建app子项目和分析其目录,ORM对象关系映射简介,Django操作orm(重点) 一丶Django的静态文件配置 #we ...
- python基础知识(一)
Python基础知识 计算基础知识 1.cpu 人类的大脑 运算和处理问题 2.内存 临时存储数据 断电就消失了 3.硬盘 永久存储数据 4.操作系统 调度硬件设备之间数据交互 python的应用和历 ...
- python基础04day
一 引子 数据类型 用途 定义方式 是否多项 有/无序 可/不可变 对应状态 数字 否 —— 不可 字符串 “”‘’“““””” 否 有 不可 列表 [] 是 有 可 同 ...
- python day 22 CSS拾遗之箭头,目录,图标
目录 day 4 learn html 1. CSS拾遗之图标 2. html文件的目录结构 3. CSS拾遗之a包含标签 4. CSS拾遗之箭头画法 day 4 learn html 2019/11 ...
- jquery问题,如何调用带this的函数?
这样写: 1 2 3 4 5 6 7 8 9 10 11 12 $(".aa").on("mouseout",function(){ var obj = ...
- Qt Graphics-View的打印功能实现
本文来研究一下Qt Graphics-View的打印功能实现. 在Qt的官方文档中介绍了Graphics-View的打印相关内容. Qt中对打印的支持是有一个独立的printsupport模块来完成的 ...
- 英特尔加速 Android 应用
下载地址 https://software.intel.com/zh-cn/android https://github.com/intel/haxm 解压目录 双击.exe,安装即可 检查SDK M ...
- iOS UILanel 一些小实用
UILabel *lab=[[UILabel alloc]initWithFrame:self.view.bounds]; //合并 lab.text=[NSString stringWithForm ...