CommonIO 总结

作为 J2SE 中” 三大核心” 之一的 IO 操作,我们虽然在学习时可以忽略 “重复造轮子” 的禁忌;但在实际开发当中,还是应本着 “业务第一,有轮子就用的” 原则来指导我们的日常工作。

java 代码的规模

当我们刚开始接触 java 时,无一例外的会从其基本语法入手。这时,我们也会跟着教程写几个简单 demo,看看效果,并因此而小激动一会。

随着学习的深入,我们会逐渐了解到我们平时练手的这些小代码块,编译后无非是一些 class 文件,它们的运行需要 java 虚拟机的加载与相关环境的支持。后来我们会接触到一些有用的工具包,它们一般是以 jar 压缩包的形式提供给我们;jar 包中一般会包含一到多个 class 文件,换句话说,jar 包将一些有用的、经过开发者实践的代码整合到了一起。照上述类推,许多的 jar 又一道构成了功能更强大的 component 组件(常见的如:我们接下来要谈到的 CommonIO);在此基础上又一次聚合,就得到了所谓的 framework 框架(如 SpringCommons 等)。

组成
组成
组成
class文件
jar包
component组件
framework框架

下载与配置

进入Apache官网Commons页面(http://commons.apache.org/)
进入CommonIO项目页(http://commons.apache.org/proper/commons-io/)
下载最新CommonsIO_jdk

下载完 CommonsIO_jar 包后,我们只需按照相应 IDE 的 lib 引入方法,完成对 jar 包的引入设置。这里以 idea 为例,我们只需先进入 project structure 面板,然后点击左侧的 Libraries 选项,最后点击添加按钮并添加想要的 jar 包。

CommonsIO 常用接口

文件及目录大小获取

获取文件大小

1
2
方法: public static long sizeOf(final File file);
调用形式: FileUtils.sizeOf(file);

获取目录大小

1
2
方法:public static long sizeOfDirectory(final File directory);
调用形式: FileUtils.sizeOfDirectory(dir);

遍历及筛选目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/** * 遍历指定目录的第一层子目录,过滤条件为:内容非空 */
Collection<File> files = FileUtils.listFiles(new File("/home/rqsir/IdeaProjects/CommonIODemo"), EmptyFileFilter.NOT_EMPTY,null);
for (File file:files ) { System.out.println(file.getAbsolutePath());}
System.out.println("-------------------------------");

/** * 遍历指定目录的所有子目录,过滤条件为:内容非空 */
Collection<File> files1 = FileUtils.listFiles(new File("/home/rqsir/IdeaProjects/CommonIODemo"), EmptyFileFilter.NOT_EMPTY, DirectoryFileFilter.INSTANCE);
for (File file:files1) { System.out.println(file.getAbsolutePath());}
System.out.println("-------------------------------");

/** * 遍历指定目录的所有子目录,过滤条件为:后缀为:java */
Collection<File> files2 = FileUtils.listFiles(new File("/home/rqsir/IdeaProjects/CommonIODemo"), new SuffixFileFilter("java"), DirectoryFileFilter.INSTANCE);
for (File file:files2) { System.out.println(file.getAbsolutePath());}
System.out.println("-------------------------------");

/** * 遍历指定目录的所有子目录,过滤条件为:后缀为:java或者class */
Collection<File> files3 = FileUtils.listFiles(new File("/home/rqsir/IdeaProjects/CommonIODemo"), FileFilterUtils.or(new SuffixFileFilter("java"),new SuffixFileFilter("class")), DirectoryFileFilter.INSTANCE);
for (File file:files3) { System.out.println(file.getAbsolutePath());}
System.out.println("-------------------------------");

/** * 遍历指定目录的所有子目录,过滤条件为:后缀为:java且不为空 */
Collection<File> files4 = FileUtils.listFiles(new File("/home/rqsir/IdeaProjects/CommonIODemo"), FileFilterUtils.and(new SuffixFileFilter("java"),EmptyFileFilter.NOT_EMPTY), DirectoryFileFilter.INSTANCE);
for (File file:files4) { System.out.println(file.getAbsolutePath());}

读取文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
//读取文件内容方式一:(一次性读取)
String content = FileUtils.readFileToString(new File("a.txt"),"utf8");
System.out.println(content);

System.out.println("------------------------------");

//读取文件内容方式二:(按行读取)
List<String> lines = FileUtils.readLines(new File("a.txt"),"utf8");
for (String line:lines
) {
System.out.println(line);
}

System.out.println("------------------------------");

//读取文件大小
byte[] bys = FileUtils.readFileToByteArray(new File("a.txt"));
System.out.println("fileSize:"+bys.length);

System.out.println("------------------------------");

//读取文件内容方式三:(通过迭代器读取)
LineIterator lineIterator = FileUtils.lineIterator(new File("a.txt"),"utf8");
while (lineIterator.hasNext()){
System.out.println(lineIterator.next());
}

写文件操作

1
2
3
4
5
6
7
8
9
10
11
12
13
//写字符串到文件
FileUtils.write(new File("b.txt"),"学习很伟大\n","utf8",true);
FileUtils.writeStringToFile(new File("b.txt"),"学习很辛苦\n","utf8",true);

//写字节数组到文件
FileUtils.writeByteArrayToFile(new File("b.txt"),"学习很幸福\n".getBytes("utf8"),true);

//写String类型的线性表到文件
List<String> lines = new ArrayList<String>();
lines.add("昨天");
lines.add("今天");
lines.add("明天");
FileUtils.writeLines(new File("b.txt"),"utf8",lines,"--->",true);//"--->"为每一行的分隔符

拷贝操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//copy file
FileUtils.copyFile(new File("avatar.jpg"),new File("avatar_copy.jpg"));
//copy file to directory
FileUtils.copyFileToDirectory(new File("avatar.jpg"),new File("out"));
//copy dir
FileUtils.copyDirectory(new File("out"),new File("out_copy"));
//copy dir to dir
FileUtils.copyDirectoryToDirectory(new File("out"),new File("outContainer"));
//copy URL to file
String url = "https://raw.githubusercontent.com/RQsir/blog_pic_bed/master/img/81a5cfb3ly1g279yehw2kj21hc0t8457.jpg?token=AKZRZC5LDP5TBBMWU5JBQ4K4YQIPI";
FileUtils.copyURLToFile(new URL(url),new File("JDK_debug.gif"));
//copy URL to String
String webPage = IOUtils.toString(new URL("http://www.baidu.com"),"utf8");
System.out.println(webPage);
String webPage2 = IOUtils.toString(new URL("http://www.163.com"),"gbk");
System.out.println(webPage2);
Powered By Valine
v1.5.2