Apache commons-io工具包的使用
Apache基金会介绍
Apache软件基金会(也就是Apache Software Foundation,简称为ASF),是专门为支持开源软件项目而办的一个非盈利性组织。在它所支持的Apache项目与子项目中,所发行的软件产品都遵循Apache许可证(Apache License)。 官方网址为:www.apache.org 。
很多著名的Java开源项目都来源于这个组织。比如:commons、kafka、lucene、maven、shiro、struts等技术,以及大数据技术中的:hadoop(大数据第一技术)、hbase、spark、storm、mahout等。
commons-io工具包
Apache的commons-io工具包中提供了IOUtils/FileUtils,为我们提供了更加简单、功能更加强大的文件操作和IO流操作功能。非常值得大家学习和使用。
下载与添加commons-io包
1.下载地址
https://commons.apache.org/proper/commons-io/download_io.cgi
2.添加jar包
FileUtils类中常用方法的介绍
打开FileUtils的api文档,我们抽出一些工作中比较常用的方法,进行总结和讲解。总结如下:
方法名
使用说明
cleanDirectory
清空目录,但不删除目录
contentEquals
比较两个文件的内容是否相同
copyDirectory
将一个目录内容拷贝到另一个目录。可以通过FileFilter过滤需要拷贝的文件
copyFile
将一个文件拷贝到一个新的地址
copyFileToDirectory
将一个文件拷贝到某个目录下
copyInputStreamToFile
将一个输入流中的内容拷贝到某个文件
deleteDirectory
删除目录
deleteQuietly
删除文件
listFiles
列出指定目录下的所有文件
openInputSteam
打开指定文件的输入流
readFileToString
将文件内容作为字符串返回
readLines
将文件内容按行返回到一个字符串数组中
size
返回文件或目录的大小
write
将字符串内容直接写到文件中
writeByteArrayToFile
将字节数组内容写到文件中
writeLines
将容器中的元素的toString方法返回的内容依次写入文件中
writeStringToFile
将字符串内容写到文件中
读取文件内容,并输出到控制台上(只需一行代码!)
java
复制代码
import java.io.File;
import org.apache.commons.io.FileUtils;
public class TestUtils1 {
public static void main(String[] args) throws Exception {
String content = FileUtils.readFileToString(new File("d:/a.txt"), "gbk");
System.out.println(content);
}
}
使用FileUtils工具类实现目录拷贝
我们可以使用FileUtils完成目录拷贝,在拷贝过程中可以通过文件过滤器(FileFilter)选择拷贝内容。
java
复制代码
import java.io.File;
import java.io.FileFilter;
import org.apache.commons.io.FileUtils;
public class TestFileUtilsDemo2 {
public static void main(String[] args) throws Exception {
FileUtils.copyDirectory(new File("d:/aaa"), new File("d:/bbb"), new FileFilter() {
@Override
public boolean accept(File pathname) {
// 使用FileFilter过滤目录和以html结尾的文件
if (pathname.isDirectory() || pathname.getName().endsWith("html")) {
return true;
} else {
return false;
}
}
});
}
}
IOUtils的妙用
打开IOUtils的api文档,我们发现它的方法大部分都是重载的。所以,我们理解它的方法并不是难事。因此,对于方法的用法总结如下:
方法名
使用说明
buffer
将传入的流进行包装,变成缓冲流。并可以通过参数指定缓冲大小
closeQueitly
关闭流
contentEquals
比较两个流中的内容是否一致
copy
将输入流中的内容拷贝到输出流中,并可以指定字符编码
copyLarge
将输入流中的内容拷贝到输出流中,适合大于2G内容的拷贝
lineIterator
返回可以迭代每一行内容的迭代器
read
将输入流中的部分内容读入到字节数组中
readFully
将输入流中的所有内容读入到字节数组中
readLine
读入输入流内容中的一行
toBufferedInputStream,toBufferedReader
将输入转为带缓存的输入流
toByteArray,toCharArray
将输入流的内容转为字节数组、字符数组
toString
将输入流或数组中的内容转化为字符串
write
向流里面写入内容
writeLine
向流里面写入一行内容
我们没有必要对每个方法做测试,只是演示一下读入d:/sxt.txt文件内容到程序中,并转成String对象,打印出来。
IOUtils的使用
java
复制代码
import java.io.*;
import org.apache.commons.io.IOUtils;
public class TestIOUtilsDemo {
public static void main(String[] args) throws Exception {
String content = IOUtils.toString(new FileInputStream("d:/sxt.txt"),"utf-8");
System.out.println(content);
}
}