19 IO流(十六)——Commons工具包,FileUtils(一)
Commons包的API:自己查吧懒得传云
Commons包的导入方法
Commons是一个java的IO开源工具,导入方法:
- 从apache.org下载commons包
- 解压
- copy其中的commons-io-2.6-sources.jar与commons-io-2.6.jar
- 在eclipse的项目中新建一个文件夹lib,粘贴jar包
- 右键jar包,buildPath
Commons包的核心方法s
1-?为FileUtils类下的方法,请用FileUtis.方法名调用。
1.sizeOf方法
返回文件或文件夹的大小
long sizeOf(File f)
实例:
public static void fileSize(){ //文件大小方法 long len = FileUtils.sizeOf(new File("src/com/xiaohei/test/Empty.java")); System.out.printf("文件大小:%d%n",len); //文件夹大小 long len2 = FileUtils.sizeOf(new File("lib")); System.out.printf("文件夹大小:%d%n",len2); }
2.listFile方法
有条件的列出子孙集,返回的是一个集合
Collection<File> listFile(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)
参数:
- 第一个参数:文件夹File
- 第二个参数:文件过滤器
- EmptyFileFilter.EMPTY 筛选空文件(文件大小为0)入集合
- EmptyFileFilter.NOT_EMPTY 筛选非空文件入集合
- new SuffixFileFilter("后缀名") 筛选符合后缀条件的文件入集合
- FileFilterUtils.or(条件1,条件2,...) 如:FileFilterUtils.or(new SuffixFileFilter("java"),new SuffixFileFilter("class")) 筛选后缀为java或class的文件入集合
- FileFilterUtils.and(条件1,条件2,...) 如:FileFilterUtils.and(new SuffixFileFilter("java"),EmptyFileFilter.EMPTY) 筛选后缀为java且为空的文件入集合
- 第三个参数:文件夹过滤器
- null 只返回第一个参数下的一层里符合参数二条件的文件
- DirectoryFileFilter.INSTANCE 返回第一个参数下的符合第二个参数限制的所有子孙集文件
public static void listFl(){ // list<File> listFile(路径,文件过滤器,文件夹过滤器) Collection<File> files = FileUtils.listFiles(new File("C:/Users/live/workspace/Connect"),EmptyFileFilter.NOT_EMPTY,DirectoryFileFilter.INSTANCE); System.out.println("--------EmptyFileFilter.NOT_EMPTY,DirectoryFileFilter.INSTANCE------------"); for(File file : files){ System.out.println(file.getAbsolutePath()); } Collection<File> files2 = FileUtils.listFiles(new File("C:/Users/live/workspace/Connect"),EmptyFileFilter.EMPTY,DirectoryFileFilter.INSTANCE); System.out.println("--------EmptyFileFilter.EMPTY,DirectoryFileFilter.INSTANCE------------"); for(File file : files2){ System.out.println(file.getAbsolutePath()); } Collection<File> files3 = FileUtils.listFiles(new File("C:/Users/live/workspace/Connect"),new SuffixFileFilter("java"),DirectoryFileFilter.INSTANCE); System.out.println("--------SuffixFileFilter(\"后缀java\"),DirectoryFileFilter.INSTANCE------------"); for(File file : files3){ System.out.println(file.getAbsolutePath()); } Collection<File> files4 = FileUtils.listFiles(new File("C:/Users/live/workspace/Connect"), FileFilterUtils.or(new SuffixFileFilter("java"),new SuffixFileFilter("class")), DirectoryFileFilter.INSTANCE); System.out.println("--------FileFilterUtils.or(后缀java,后缀class,...),DirectoryFileFilter.INSTANCE------------"); for(File file : files4){ System.out.println(file.getAbsolutePath()); } Collection<File> files5 = FileUtils.listFiles(new File("C:/Users/live/workspace/Connect"), FileFilterUtils.and(new SuffixFileFilter("java"),EmptyFileFilter.EMPTY), DirectoryFileFilter.INSTANCE); System.out.println("--------FileFilterUtils.and(后缀java,文件为空,...),DirectoryFileFilter.INSTANCE------------"); for(File file : files5){ System.out.println(file.getAbsolutePath()); } }
3.读取文件的相关方法
- readFileToString方法
- readFileToByteArray方法
- readLines方法:逐行读取
- lineIterator方法:迭代器逐行读取
public static void readFile() throws IOException{ System.out.println("--------readFileToString方法------"); String str = FileUtils.readFileToString(new File("readFile.txt"),"gbk"); System.out.println(str); System.out.println("--------readFileToByteArray方法------"); byte[] content = FileUtils.readFileToByteArray(new File("readFile.txt")); System.out.println("输出数组的长度:"+content.length); System.out.println("--------readLines方法:逐行读取------"); List<String> msgs = FileUtils.readLines(new File("readFile.txt")); for(String m : msgs){ System.out.println(m); } System.out.println("--------lineIterator方法:迭代器逐行读取------"); LineIterator it = FileUtils.lineIterator(new File("readFile.txt")); while(it.hasNext()){ System.out.println(it.nextLine()); } }
4.写入文件的相关方法
- write方法
- writeByteArrayToFile方法
- writeLine方法
public static void writeFile() throws IOException{ //写入文件 System.out.println("----------write方法---------------"); FileUtils.write(new File("writeFile.txt"),"这里是写入的内容","UTF-8",true);//有关文件的操作都要习惯的写上字符集 System.out.println("------------writeByteArrayToFile方法--------------"); FileUtils.writeByteArrayToFile(new File("writeFile1.txt"),"这里是写入的内容".getBytes("UTF-8"),true);//有关文件的操作都要习惯的写上字符集 System.out.println("------------writeLine方法--------------"); List<String> datas = new ArrayList<String>(); datas.add("周杰伦"); datas.add("周星驰"); datas.add("周润发"); FileUtils.writeLines(new File("fileLine.txt"), datas,"--连接符---",true); }
完整代码
package com.xiaohei.test; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.commons.io.FileUtils; import org.apache.commons.io.LineIterator; import org.apache.commons.io.filefilter.DirectoryFileFilter; import org.apache.commons.io.filefilter.EmptyFileFilter; import org.apache.commons.io.filefilter.FileFilterUtils; import org.apache.commons.io.filefilter.SuffixFileFilter; public class COMTest { public static void main(String[] args) throws IOException{ //sizeOf方法:返回文件或文件夹大小 System.out.println("--------1.sizeOf方法--------------"); fileSize(); //listFile方法:返回子孙文件集 System.out.println("--------2.listFiles方法--------------"); listFl(); //读取文件内容方法 System.out.println("--------3.读取的相关方法--------------"); readFile(); //写出文件的相关方法 System.out.println("--------4.写出文件的相关方法--------------"); writeFile(); } public static void fileSize(){ //文件大小方法 long len = FileUtils.sizeOf(new File("src/com/xiaohei/test/Empty.java")); System.out.printf("文件大小:%d%n",len); //文件夹大小 long len2 = FileUtils.sizeOf(new File("lib")); System.out.printf("文件夹大小:%d%n",len2); } public static void listFl(){ // list<> listFile(路径,文件过滤器,文件夹过滤器) Collection<File> files = FileUtils.listFiles(new File("C:/Users/live/workspace/Connect"),EmptyFileFilter.NOT_EMPTY,DirectoryFileFilter.INSTANCE); System.out.println("--------EmptyFileFilter.NOT_EMPTY,DirectoryFileFilter.INSTANCE------------"); for(File file : files){ System.out.println(file.getAbsolutePath()); } Collection<File> files2 = FileUtils.listFiles(new File("C:/Users/live/workspace/Connect"),EmptyFileFilter.EMPTY,DirectoryFileFilter.INSTANCE); System.out.println("--------EmptyFileFilter.EMPTY,DirectoryFileFilter.INSTANCE------------"); for(File file : files2){ System.out.println(file.getAbsolutePath()); } Collection<File> files3 = FileUtils.listFiles(new File("C:/Users/live/workspace/Connect"),new SuffixFileFilter("java"),DirectoryFileFilter.INSTANCE); System.out.println("--------SuffixFileFilter(\"后缀java\"),DirectoryFileFilter.INSTANCE------------"); for(File file : files3){ System.out.println(file.getAbsolutePath()); } Collection<File> files4 = FileUtils.listFiles(new File("C:/Users/live/workspace/Connect"), FileFilterUtils.or(new SuffixFileFilter("java"),new SuffixFileFilter("class")), DirectoryFileFilter.INSTANCE); System.out.println("--------FileFilterUtils.or(后缀java,后缀class,...),DirectoryFileFilter.INSTANCE------------"); for(File file : files4){ System.out.println(file.getAbsolutePath()); } Collection<File> files5 = FileUtils.listFiles(new File("C:/Users/live/workspace/Connect"), FileFilterUtils.and(new SuffixFileFilter("java"),EmptyFileFilter.EMPTY), DirectoryFileFilter.INSTANCE); System.out.println("--------FileFilterUtils.and(后缀java,文件为空,...),DirectoryFileFilter.INSTANCE------------"); for(File file : files5){ System.out.println(file.getAbsolutePath()); } } /** * 读取文件的方法 * @throws IOException * */ public static void readFile() throws IOException{ System.out.println("--------readFileToString方法------"); String str = FileUtils.readFileToString(new File("readFile.txt"),"gbk"); System.out.println(str); System.out.println("--------readFileToByteArray方法------"); byte[] content = FileUtils.readFileToByteArray(new File("readFile.txt")); System.out.println("输出数组的长度:"+content.length); System.out.println("--------readLines方法:逐行读取------"); List<String> msgs = FileUtils.readLines(new File("readFile.txt")); for(String m : msgs){ System.out.println(m); } System.out.println("--------lineIterator方法:迭代器逐行读取------"); LineIterator it = FileUtils.lineIterator(new File("readFile.txt")); while(it.hasNext()){ System.out.println(it.nextLine()); } } /** * 写出文件的相关方法 * @throws IOException * */ public static void writeFile() throws IOException{ //写入文件 System.out.println("----------write方法---------------"); FileUtils.write(new File("writeFile.txt"),"这里是写入的内容","UTF-8",true);//有关文件的操作都要习惯的写上字符集 System.out.println("------------writeByteArrayToFile方法--------------"); FileUtils.writeByteArrayToFile(new File("writeFile1.txt"),"这里是写入的内容".getBytes("UTF-8"),true);//有关文件的操作都要习惯的写上字符集 System.out.println("------------writeLine方法--------------"); List<String> datas = new ArrayList<String>(); datas.add("周杰伦"); datas.add("周星驰"); datas.add("周润发"); FileUtils.writeLines(new File("fileLine.txt"), datas,"--连接符---",true); } }