一. 为什么出现 common-io?
我们可以通过 字节操作流 InputStream,OutputStream 或者 字符操作流 Reader,Writer 来读取和写入文件内容,进行复制文件,复制文件夹等操作, 但这些操作流程固定,写起来复杂,并且效率较低,能不能有一个工具jar包,来帮我们实现简单的功能呢?
Apache 提供了对 IO流的操作的jar包, common-io.
下载使用版本 2.4
添加 common-io.jar包的依赖,我们主要使用的是 org.apache.commons.io.FileUtils 工具类。
下面,老蝴蝶介绍几个常用的功能。
二. 统计文件和目录的大小,比较文件的内容是否一致
二.一 方法
二.二 演示
源代码:
二.二.一 统计文件和文件夹的大小
@Test public void sizeTest() throws Exception{ String filepath="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"Hello3.txt"; String dirpath="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"a"; File file=new File(filepath); File dirFile=new File(dirpath); //文件的大小 System.out.println("Hello3文件大小:"+FileUtils.sizeOf(file)); //文件夹的大小 System.out.println("a文件夹的大小:"+FileUtils.sizeOfDirectory(dirFile)); }
运行程序,控制台打印输出:
查看源代码和运行结果,会发现 sizeOfDirectory() 会递归查询该文件夹下的所有文件的大小。
二.二.二 比较文件内容是否相同 contentEquals()
修改 data.txt, data2.txt, data3.txt 文件的内容
data.txt 设置内容为:
你好啊,我是两个蝴蝶飞
data2.txt 设置内容为:
你好啊,我是岳泽霖
data3.txt 设置内容为:
你好啊,我是两个蝴蝶飞
data.txt 与 data3.txt 的文件内容相同。
@Test public void contentEqualsTest() throws Exception{ File file1=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"data.txt"); File file2=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"data2.txt"); File file3=new File("E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"data3.txt"); //文件的大小 System.out.println("文件1与文件2内容是否相同:"+FileUtils.contentEquals(file1,file2)); //false System.out.println("文件3与文件2内容是否相同:"+FileUtils.contentEquals(file3,file2)); //false System.out.println("文件1与文件3内容是否相同:"+FileUtils.contentEquals(file1,file3));//true }
运行程序,控制台打印输出:
三. 读取文件内容
可以直接读取成字符串,也可以读取成字节数组, 可以按行。
三.一 方法
三.二 演示 读取文件内容
@Test public void readTest() throws Exception{ String filepath="E:"+ File.separator+"ideaWork"+File.separator+"Java2"+File.separator+"fileSrc" +File.separator+"Hello3.txt"; File file=new File(filepath); //读出内容字符串 String content=FileUtils.readFileToString(file,"UTF-8"); System.out.println("内容:"+content); //读出字节 byte[] bytes=FileUtils.readFileToByteArray(file); System.out.println("输出字节内容:"+new String(bytes)); System.out.println("------------读取行信息---------"); //按行读取,对每一行进行相应的处理 List<String> lines=FileUtils.readLines(file,"UTF-8"); for(String str:lines){ System.out.println(str); } }
运行程序,控制台打印输出: