Apache-Commons-FileIOUtils工具类常用方法使用
一、导入依赖
1.1、Maven项目
mavne依赖
<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.11.0</version>
</dependency>
1.2、Java项目
1、下载依赖
访问Apache官网:https://www.apache.org/
翻到最下面,找到
Commons
,点进去然后在下面表格里找到
IO
,并点击进入这里下载最新版本,JDK版本必须为Java8
这里选择
.zip
结尾的,上面那个是Linux系统下载的下载好后解压,就会有一个目录,只需要把圈出来的jar包导入到项目里即可
2、导入依赖
打开Idea,点击左上角的项目,然后点击
Project Structure...
,打开项目资源然后点击左侧的
Libraries
,然后点击+
号,再选择Java
在文件夹里找到我们的jar包,然后选择则,点击OK
当项目里出现这个文件,就代表着导入成功了
二、API文档查看步骤
打开下载的文件的
docs
目录,里面存放着所有api的文档,然后打开index.html
页面然后找到我们下载的包
io
进入IO后,我们找到本次学习的
FileUtils
类,点击进入然后就会看到里面所有的方法等等
三、文件常用API使用
这里大概分了几种类型方便查找使用
这里为了方便观看,所有异常直接抛出
1、操作步骤目录和文件都包含的
(1)将一个文件拷贝到某个目录下
copyFileToDirectory:将一个文件拷贝到某个目录下(目标目录不存在就会创建)
准备
在test目录里创建
aaa.txt
文件
开始
将文件复制到不存在的
aaa
目录里
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {FileUtils.copyFileToDirectory(new File("d:/test/aaa.txt"),new File("d:/test/aaa"));}
}
结果(创建了目录aaa,并粘贴了文件)
(2)列出指定目录下的所有文件(可过滤)
listFiles:列出指定目录下的所有文件(可过滤子目录)
准备
在test目录里创建两个目录,两个文件
在两个目录里分别创建两个文件
开始
遍历test目录及其子目录下所有文件
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*;
import java.util.Collection;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {Collection<File> files = FileUtils.listFiles(new File("d:/test"), new IOFileFilter() {/*** 所有文件的过滤器* @param file* @return*/@Overridepublic boolean accept(File file) {return true;}@Overridepublic boolean accept(File file, String s) {return true;}}, new IOFileFilter() {/*** 子目录过滤器,可以过滤子目录* @param file* @return*/@Overridepublic boolean accept(File file) {return true;}@Overridepublic boolean accept(File file, String s) {return true;}});for (File file : files) {System.out.println(file.toString());}}
}
结果
遍历test目录下除了
ccc.html
文件的所有文件
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*;
import java.util.Collection;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {Collection<File> files = FileUtils.listFiles(new File("d:/test"), new IOFileFilter() {/*** 所有文件的过滤器* @param file* @return*/@Overridepublic boolean accept(File file) {// 如果文件名称是以html结尾的,则拦截if(file.getName().endsWith("html")){return false;}return true;}@Overridepublic boolean accept(File file, String s) {return false;}}, new IOFileFilter() {/*** 子目录过滤器,可以过滤子目录* @param file* @return*/@Overridepublic boolean accept(File file) {return true;}@Overridepublic boolean accept(File file, String s) {return false;}});for (File file : files) {System.out.println(file.toString());}}
}
结果
遍历test目录下除了aaa目录下的所有文件
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*;
import java.util.Collection;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {Collection<File> files = FileUtils.listFiles(new File("d:/test"), new IOFileFilter() {/*** 所有文件的过滤器* @param file* @return*/@Overridepublic boolean accept(File file) {return true;}@Overridepublic boolean accept(File file, String s) {return false;}}, new IOFileFilter() {/*** 子目录过滤器,可以过滤子目录* @param file* @return*/@Overridepublic boolean accept(File file) {/*** 如果文件名是aaa,那么就拦截不遍历其下所有文件*/if("aaa".equals(file.getName())){return false;}return true;}@Overridepublic boolean accept(File file, String s) {return false;}});for (File file : files) {System.out.println(file.toString());}}
}
结果
(3)返回文件/目录的大小
sizeOf:返回文件/目录的大小
准备
在test目录下,创建
aaa.txt
文件,里面输入测试数据,并且右键查看文件大小,记住文件字节大小在test里再创建一个bbb目录,然后在里面新建
bbb.txt
文件,里面输入测试内容,并且查看字节大小
开始
获取
aaa.txt
文件以及bbb
目录的大小
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*;
import java.util.Collection;
import java.util.List;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {long l1 = FileUtils.sizeOf(new File("d:/test/aaa.txt"));long l2 = FileUtils.sizeOf(new File("d:/test/bbb/bbb.txt"));System.out.println("文件大小:" + l1); // 文件大小:5518System.out.println("目录大小:" + l2); // 目录大小:11038}
}
结果
2、操作目录的
(1)清空目录,但不删除目录
cleanDirectory:清空目录,但不删除目录
准备工作:
先在D盘下创建
test
目录,然后在里面新建一个目录,两个文件, 用来测试
开始使用
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {/*** 清空目录,但不删除目录*/FileUtils.cleanDirectory(new File("d:/test"));}
}
结果
(2)拷贝目录(可过滤)
copyDirectory:将一个目录内容拷贝到另一个目录,只拷贝内容,可以通过
FileFliter
过滤需要拷贝的文件
准备步骤
在test文件夹里创建一个
abc
目录,再创建一个aaa.txt
文件,一个bbb.html
文件
开始使用
只把不为
html
结尾的文件拷贝过去
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {/*** 清空目录,但不删除目录*/FileUtils.copyDirectory(new File("d:/test"), new File("c:/"), new FileFilter() {/*** 每个操作的文件都会走这个accept方法* 只有返回true,才能走完代码,为false则拦截* @param pathname* @return*/@Overridepublic boolean accept(File pathname) {if(!pathname.toString().endsWith("html")){return true;}return false;}});}
}
结果
(3)删除目录
deleteDirectory:删除目录
准备
在test文件夹里创建aaa目录
开始
将刚创建的aaa目录删除
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {FileUtils.deleteDirectory(new File("d:/test/aaa"));}
}
结果
3、操作文件的
(1)比较两个文件的内容是否相同
contentEquals:比较两个文件的内容是否相同
准备工作
在D盘下test目录里创建两个内容一样的文件,里面写入相同的内容
在test目录里创建两个内容不一样的文件,里面写入不相同的内容
开始使用
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {/*** 清空目录,但不删除目录*/boolean f1 = FileUtils.contentEquals(new File("d:/test/a1.txt"), new File("d:/test/a2.txt"));boolean f2 = FileUtils.contentEquals(new File("d:/test/b1.txt"), new File("d:/test/b2.txt"));System.out.println(f1); // true;System.out.println(f2); // false;}
}
结果
(2)将文件拷贝到新地址
copyFile:将一个文件内容拷贝到一个新的地址
准备
在D盘下test目录里创建
aaa.txt
文件
开始
将指定的文件复制到D盘test目录里不存在的文件
bbb.txt
(会自动创建)
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {FileUtils.copyFile(new File("d:/test/aaa.txt"),new File("d:/test/bbb.txt"));}
}
结果(创建了文件
bbb.txt
并把内容粘贴了进去)
(2)将文件拷贝到新地址
(3)将一个输入流的内容拷贝到某个文件
copyInputStreamToFile:将一个输入流的内容拷贝到某个文件(目录不存在就会创建)
准备
在
test
目录里创建aaa.txt
文件
开始
使用输入流读取文件,然后拷贝到不存在的目录aaa里
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {FileUtils.copyInputStreamToFile(new FileInputStream("d:/test/aaa.txt"),new File("d:/test/aaa/bbb.txt"));}
}
结果
(4)删除文件
deleteQuietly:删除文件
准备
在test目录里创建文件
aaa.txt
开始
将创建的文件删除
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {FileUtils.deleteQuietly(new File("d:/test/aaa.txt"));}
}
结果
(5)打开文件的输入流
openInputStream:打开指定文件的输入流
准备
在test目录下创建
aaa.txt
文件
使用
打开aaa文件的输入流
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*;
import java.util.Collection;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {FileInputStream fis = FileUtils.openInputStream(new File("d:/test/aaa.txt"));}
}
(6)将文件内容作为字符串返回
readFileToString:将文件内容作为字符串返回(自带换行)
准备
在test目录里创建
aaa.txt
文件,然后在里面编写一些测试内容
使用
读取aaa.txt文件内容
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*;
import java.util.Collection;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {String s = FileUtils.readFileToString(new File("d:/test/aaa.txt"), "utf-8");System.out.println(s);}
}
结果
(7)将文件内容按行返回到字符串数组中
readLines:将文件内容按行返回到字符串数组中
准备
在test目录下创建
aaa.txt
文件,然后在里面编写点测试内容
开始
按行读取
aaa.txt
文件里面的内容
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*;
import java.util.Collection;
import java.util.List;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {List<String> s = FileUtils.readLines(new File("d:/test/aaa.txt"),"utf-8");for (String s1 : s) {System.out.println(s1);}}
}
结果
(8)将字符串内容写到文件中
writeStringToFile:将字符串内容直接写到文件中(文件没有自动创建)
开始
将我是张三aaa换行输出到不存在的
aaa.txt
文件中
package com.tcc.test;import com.tcc.entity.User;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.IOFileFilter;import java.io.*;
import java.util.Collection;
import java.util.List;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {// \t\n实现换行FileUtils.writeStringToFile(new File("d:/test/aaa.txt"),"我是张三\t\naaa","utf-8");}
}
结果
四、IO流常用API使用
1、操作两种流(IO)的
(1)、转为缓冲流
buffer():将传入的流转为缓冲流,并且可以通过参数指定缓冲大小
使用
package com.tcc.test;import org.apache.commons.io.IOUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {String url = "d:/test/aaa.txt";// 转为字节输入流包装流BufferedInputStream bis1 = IOUtils.buffer(new FileInputStream(url));BufferedInputStream bis2 = IOUtils.buffer(new FileInputStream(url),1024); // 指定缓冲大小// 转为字节输出流包装流BufferedOutputStream bos1 = IOUtils.buffer(new FileOutputStream(url));BufferedOutputStream bos2 = IOUtils.buffer(new FileOutputStream(url),1024); // 指定缓冲大小// 转为字符输入流包装流BufferedReader br1 = IOUtils.buffer(new FileReader(url));BufferedReader br2 = IOUtils.buffer(new FileReader(url),1024); // 指定缓冲大小// 转为字符输出流包装流BufferedWriter bw1 = IOUtils.buffer(new FileWriter(url));BufferedWriter bw2 = IOUtils.buffer(new FileWriter(url),1024);}
}
(2)、关闭流
closeQuietly():关闭打开的流
使用
package com.tcc.test;import org.apache.commons.io.IOUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {String url = "d:/test/aaa.txt";FileInputStream fis = new FileInputStream(url);// 关闭流IOUtils.closeQuietly(fis);}
}
(3)、比较流中内容
contentEquals():比较流中内容是否相等,相等返回true,反之为false
准备
使用
比较两个文本中的内容是否相等
package com.tcc.test;import org.apache.commons.io.IOUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/aaa.txt";String url2 = "d:/test/bbb.txt";// 比较字节流FileInputStream fis1 = new FileInputStream(url1);FileInputStream fis2 = new FileInputStream(url2);boolean b = IOUtils.contentEquals(fis1, fis2);System.out.println(b); // true;// 比较字符流FileReader fr1 = new FileReader(url1);FileReader fr2 = new FileReader(url2);boolean b2 = IOUtils.contentEquals(fis1, fis2);System.out.println(b2); // true;}
}
(4)拷贝
copy():将输入流中内容拷贝到输出流中,并可以指定字符编码
准备
开始
将
aaa.txt
,拷贝到当前目录,名字为bbb.txt
最好使用字节流当做参数,其他流使用有坑,字符流的粘贴不过来内容
package com.tcc.test;import org.apache.commons.io.IOUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/aaa.txt";String url2 = "d:/test/bbb.txt";// 字节流输出到字节流,返回值为文本大小int fileSize = IOUtils.copy(new FileInputStream(url1), new FileOutputStream(url2));System.out.println(fileSize); // 17}
}
(5)拷贝(大于2G)
copyLarge():拷贝内容,适合大于2G的内容,使用了缓冲流
准备
准备一个比较大的文本或者图片
开始
将上面文件拷贝一份,查看运行速度
package com.tcc.test;import org.apache.commons.io.IOUtils;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/testPic.png";String url2 = "d:/test/testPic2.png";// 拷贝字节流内容,返回文件大小 执行很快long l = IOUtils.copyLarge(new FileInputStream(url1), new FileOutputStream(url2));System.out.println(l); // 20673353}
}
2、操作输入流的
(1)、返回迭代器
lineIterator():返回可以迭代每一行的迭代器
准备
开始
package com.tcc.test;import org.apache.commons.io.IOUtils;
import org.apache.commons.io.LineIterator;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/aaa.txt";LineIterator lineIterator = IOUtils.lineIterator(new FileInputStream(url1), "utf-8");
// System.out.println(lineIterator.next()); // 我是张三/*** 我是张三* aaa*/while (lineIterator.hasNext()){System.out.println(lineIterator.next());}}
}
(2)、将输入流中的内容转为字符串
toString():将输入流中的内容转为字符串
准备
开始
读取文本里面内容
package com.tcc.test;import org.apache.commons.io.IOUtils;
import org.apache.commons.io.LineIterator;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/aaa.txt";String s = IOUtils.toString(new FileInputStream(url1), "utf-8");System.out.println(s); // 我是张三 aaa}
}
(3)内容转为字节/字符数组
toByteArray():转为字节数组 toCharArray:转为字符数组
开始
package com.tcc.test;import org.apache.commons.io.IOUtils;
import org.apache.commons.io.LineIterator;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/aaa.txt";/*** -26* -120* -111* -26* -104* -81* -26* -99* -114* -27* -101* -101*/byte[] bytes = IOUtils.toByteArray(new FileInputStream(url1));for (byte aByte : bytes) {System.out.println(aByte);}/*** 我* 是* 李* 四*/char[] chars = IOUtils.toCharArray(new FileInputStream(url1),"utf-8");for (char aChar : chars) {System.out.println(aChar);}}
}
结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-46stNOFP-1665813842283)(img/1665813756045.png)]
3、操作输出流的
(1)、向流中写入内容
write():向流中写入内容,但会替换原来的内容
准备
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U5Gbe857-1665813842283)(img/1665797968219.png)]
开始
package com.tcc.test;import org.apache.commons.io.IOUtils;
import org.apache.commons.io.LineIterator;import java.io.*;/*** @author 宇辰* @date 2022/8/31-8:53**/
public class Test {public static void main(String[] args) throws IOException {String url1 = "d:/test/aaa.txt";IOUtils.write("我是李四",new FileOutputStream(url1),"utf-8");}
}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mcds30Zr-1665813842284)(img/1665798923237.png)]
Apache-Commons-FileIOUtils工具类常用方法使用相关推荐
- org.apache.commons.commons-lang3工具类(一)
https://blog.csdn.net/qq_31289187/article/details/85343068 本文只是简单的介绍了commons-lang3中的SystemUtils.Stri ...
- apache commons常用工具类
1.有些情况下,Arrays满足不到你对数组的操作?不要紧,ArrayUtils帮你 ArrayUtils public class TestMain { public static void ma ...
- 常用工具类 (一) : Apache Commons 常用工具类整理 (全)
文章目录 一.commons-lang3 引入依赖 StringUtils 字符串工具类 StringEscapeUtils 转义字符串工具类 NumberUtils 数字工具类 ArrayUtils ...
- Apache Commons StringUtils工具类深入整理
字符串是在程序开发中最常见的,Apache Commons开源项目在org.apache.commons.lang3包下提供了StringUtils工具类,该类相当于是对jdk自带的String类的增 ...
- Java中字符串工具类继承org.apache.commons.lang3.StringUtils类代码
场景 转换为字节数组:是否包含字符串:替换掉HTML标签方法:替换为手机识别的HTML,去掉样式及属性,保留回车: 缩略字符串(不区分中英文字符):转换为Double类型:转换为Float类型:转换为 ...
- 转载:Apache commons开源工具简介
Apache Commons是一个非常有用的工具包,解决各种实际的通用问题,下面是一个简述表,详细信息访问http://jakarta.apache.org/commons/index.html Be ...
- 转帖:Apache Commons实用工具
转载网络上的内容,觉得挺有用就贴过来 一.Commons BeanUtils http://jakarta.apache.org/commons/beanutils/index.html 说明:针对B ...
- StringUtils 工具类常用方法汇总 1(判空、转换、移除、替换、反转)
Apache commons lang3 包下的 StringUtils 工具类中封装了一些字符串操作的方法,非常实用,使用起来也非常方便.最近自己也经常在项目中使用到了里面的一些方法,在这里将常用的 ...
- hbw-utils - guava基本数据类型工具类常用方法的整理
世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程. 正如标题第一个字段所写,我正在致力于开发一款全新的工具类.工具类应该是程序中最最基础.最最稳定的类,所以要开发有 ...
- Java实用类,包装类,日历类,日期类等工具类常用方法
文章目录 第二章-实用类 1.枚举类型 2.包装类 3.包装类的常用方法 4.包装类的自动装箱和拆箱 5.String类 6.StringBuffer对象 String,StringBuffer,St ...
最新文章
- 国庆七天乐——第一天
- 安装centos系统时,修改默认网卡名
- ASP.NET - 演练:创建网页以显示 XML 数据
- java集合租车_Java入门第二季 租车系统
- 【大学课程】线性代数基础知识点
- java足球经理2010下载_apk是什么文件?apk文件怎么打开?
- 如何成为“10倍效率”开发者
- Linux Oracle服务启动停止脚本与开机自启动
- Android深度探索(卷1)HAL与驱动开发学习笔记(8)
- CAD文件查看器Acme CAD Converter V 8.10.2.1536【轻松查看CAD】
- 微信好友检测助手App
- 微信公众平台卡劵功能接入指南
- 优秀的管理者如何带好团队(这几个技巧你是否学会)
- Photoshop 2023 支持 M1 Mac下载
- [Beta]第四次 Scrum Meeting
- 二、使用Stream流的方式完成过滤操作
- 1w存银行一年多少利息_100万存银行1年能有多少钱利息?
- 关于js 中 try catch用法
- 邮件发送技巧:TO, CC, BCC(收件人、抄送、密送)
- 041_CSS及案例-网站主页模板
热门文章
- python编写时钟代码_python编写时钟代码
- 冰河木马实验(V8.4)
- miscrosoft visio 2003记
- 2007-2018年软考高级之系统分析师真题及答案解析
- 正则表达式 - 中文、英文姓名匹配
- idea2019.3.3不能热部署_复盘曼联2-1热刺:3大战术力助索肖自救,1人成“红魔”复苏关键...
- word 2013 长篇文档排版案例教程
- 计算机毕业设计android的手机商城app(源码+系统+mysql数据库+Lw文档)
- 常用计算机操作技巧与方法ppt,相见恨晚的20个常用PPT小技巧
- 抢红包插件实现原理浅析