多个class文件打包成jar包,多个jar包放在一起组成一个组件,多个组件组成一个框架
CommonsIO就是一个组件,是Apache的一个组件
环境配置
下载地址
http://commons.apache.org/proper/commons-io/download_io.cgi
下载zip
在项目里创建一个lib文件夹,将这两个包导入到lib文件夹
idea里选择File-----> project Structure------>Modles ---->Dependencies 单击右边的加号,选择 JARS or directories 将commons-io.jar导入(不是sources.jar ,这个是源码包)
API文档
API文档在zip下的docs文件夹下的index.html
常用操作
FileUtils
General file manipulation utilities.(一般的文件操作工具。)
Facilities are provided in the following areas:
writing to a file(写文件)
reading from a file(读)
make a directory including parent directories (创建一个包含父目录的目录)
copying files and directories (复制文件和目录)
deleting files and directories(删除文件和目录)
converting to and from a URL(转换一个URL)
listing files and directories by filter and extension(按筛选器和扩展名列出文件和目录)
comparing file content(比较文件内容)
file last changed date(文件最后更改日期)
calculating a checksum(计算校验和)
1.listing files and directories by filter and extension(按筛选器和扩展名列出文件和目录)
listFiles(File directory, IOFileFilter fileFilter, IOFileFilter dirFilter)方法 返回值static Collection
参数
File directory:目标文件
后面两个参数是加入筛选器
IOFileFilter fileFilte:IOFileFilter 是一个接口 用来筛选文件
常用实现这个接口的类:EmptyFileFilter 它的两个常量( EMPTY,NOT_EMPTY)
DirectoryFileFilter 它的两个常量(INSTANCE,DIRECTORY) INSTANCE表示文件夹包含含文件
SuffixFileFilter 根据后缀(文件名的结尾)过滤文件。这用于检索特定类型的所有文件。
FileFilterUtils 这个过滤器接受文件(不是目录)。or(IOFileFilter …filters)方法 (表示或者) ,and(IOFileFilter …filters) 方法 (表示与) 返回值都是IOFileFilter
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.filefilter.*;
import java.io.File;
import java.util.Collection;
public class CommonIO01 {
public static void main(String[] args) {
//文件的大小
long len = FileUtils.sizeOf(new File("abc.txt"));
System.out.println(len);
//目录的大小
len= FileUtils.sizeOf(new File("D:\\IdeaProjects\\java1")); //不用递归,直接获得
System.out.println(len);
//列出子孙 三个参数 第一个参数是目标file目录 第二个参数是过滤,比如说不同的后缀 第三个参数文件夹的目录
Collection<File> files=FileUtils.listFiles(new File("D:\\IdeaProjects\\java1"), EmptyFileFilter.NOT_EMPTY,null);
for (File file:files){
System.out.println(file.getAbsolutePath());
}
System.out.println("----------------");
//获取子文件夹下的所有文件
files=FileUtils.listFiles(new File("D:\\IdeaProjects\\java1"),EmptyFileFilter.NOT_EMPTY, DirectoryFileFilter.INSTANCE);
for (File file:files){
System.out.println(file.getAbsolutePath());
}
//获取后缀为java子文件夹下的所有文件
System.out.println("----------------");
files=FileUtils.listFiles(new File("D:\\IdeaProjects\\java1"),new SuffixFileFilter("java"),DirectoryFileFilter.INSTANCE);
for (File file:files){
System.out.println(file.getAbsolutePath());
}
System.out.println("----------------");
//获取后缀为java或者为class 子文件夹下的所有文件
files=FileUtils.listFiles(new File("D:\\IdeaProjects\\java1"), FileFilterUtils.or(new SuffixFileFilter("java"),new SuffixFileFilter("class"),EmptyFileFilter.NOT_EMPTY),DirectoryFileFilter.INSTANCE);
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
System.out.println("----------------");
//获取后缀为java并且不为空 子文件夹下的所有文件
files=FileUtils.listFiles(new File("D:\\IdeaProjects\\java1"),FileFilterUtils.and(new SuffixFileFilter("class"),EmptyFileFilter.NOT_EMPTY),DirectoryFileFilter.INSTANCE);
for (File file : files) {
System.out.println(file.getAbsolutePath());
}
}
}
读取文件
常用方法
方法 | 返回值 | 说明 |
---|---|---|
readFileToString(File file, Charset encoding) | static String | 读取一个文件的内容为字符串 encoding参数为字符集 |
readFileToByteArray(File file) | static byte[] | 读取一个文件的内容为字节数组 |
readLines(File file, Charset encoding) | static List | 读取一个文件的内容,每一行的内容加入到List |
lineIterator(File file, String encoding) | static LineIterator | 返回一个迭代器 可以读取每一行 |
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class CommonIoRead {
public static void main(String[] args) throws IOException {
//读取文件
//字符串读取
String info= FileUtils.readFileToString(new File("abc.txt"),"UTF-8");
System.out.println(info);
//字节数组读取
byte[] data=FileUtils.readFileToByteArray(new File("abc.txt"));
System.out.println(data.length);
//逐行读取
List<String> msg=FileUtils.readLines(new File("abc.txt"),"UTF-8");
for (String m:msg) {
System.out.println(m);
}
LineIterator it=FileUtils.lineIterator(new File("abc.txt"),"UTF-8");
while (it.hasNext()){
System.out.println(it.nextLine());
}
}
}
写文件
常用方法
方法 | 说明 |
---|---|
write(File file, CharSequence data, Charset encoding) | 写入文件 参数file为目标文件,data为写入数据,encoding为字符集 |
write(File file, CharSequence data, String encoding, boolean append) | 写入文件 append为是否追加 |
writeByteArrayToFile(File file, byte[] data) | 写入文件 参数file为目标文件,data为写入数据的字节数组 |
writeByteArrayToFile(File file, byte[] data, boolean append) | append为是否追加 |
writeLines(File file, Collection<?> lines) | 写入文件 参数file为目标文件 line为数据的容器 |
writeLines(File file, Collection<?> lines, String lineEnding) | lineEnding 为写入之后容器内容之间的分隔符 |
writeLines(File file, String encoding, Collection<?> lines, boolean append) | append为是否追加 |
writeLines(File file, String encoding, Collection<?> lines, String lineEnding) | encoding为字符集 |
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class CommonIoWrite {
public static void main(String[] args) throws IOException {
FileUtils.write(new File("abc.txt"),"无兄弟不篮球\r\n","UTF-8");
FileUtils.writeStringToFile(new File("abc.txt"),"无兄弟不篮球\r\n","UTF-8");
FileUtils.writeByteArrayToFile(new File("abc.txt"),"无兄弟不篮球".getBytes(),true);
List<String> data=new ArrayList<>();
data.add("篮球");
data.add("basketball");
data.add("crossover");
FileUtils.writeLines(new File("abc.txt"),data,"---",true);
}
拷贝
常用方法
方法 | 说明 |
---|---|
copyFile(File srcFile, File destFile) | 拷贝文件 srcFile源文件 destFile目标文件 |
copyFileToDirectory(File srcFile, File destDir) | 拷贝文件到目录 srcFile源文件 destFile目标目录 |
copyToDirectory(File src, File destDir) | 拷贝源文件夹的内容到目标文件夹 |
copyDirectoryToDirectory(File srcDir, File destDir) | 拷贝源文件夹的目录到目标文件夹下 |
copyURLToFile(URL source, File destination) | 拷贝URL资源到目标文件 |
还有一个IOUtils的一个方法
static String toString(InputStream input, Charset encoding) ; //input是输入流 encoding是字符集
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import java.io.File;
import java.io.IOException;
import java.net.URL;
public class CommonIoCopy {
public static void main(String[] args) throws IOException {
//复制文件
FileUtils.copyFile(new File("a.png"),new File("coopy.png"));
//复制文件到目录
FileUtils.copyFileToDirectory(new File("a.png"),new File("lib"));
//复制目录到目录
FileUtils.copyDirectoryToDirectory(new File("lib"),new File("lib2")); //是在lib2下创建lib
//复制目录
FileUtils.copyDirectory(new File("lib"),new File("lib3")); //是将lib的内容复制到lib3下
//拷贝URL (从网上拷贝一张图片)
String url = "https://pic2.zhimg.com/v2-7d01cab20858648cbf62333a7988e6d0_qhd.jpg";
FileUtils.copyURLToFile(new URL(url),new File("marvel.png"));
//拷贝网页
String data= IOUtils.toString(new URL("www.163.com"),"gbk");
System.out.println(data);
}
}