commons-io是一款处理io流的工具,封装了很多处理io流和文件的方法,可以大大简化我们处理io流和操作文件的代码。从common-io的官方使用文档可以看出,它主要分为工具类、尾端类、行迭代器、文件过滤器、文件比较器和扩展流。

官网地址:http://commons.apache.org/proper/commons-io/

下载 :http://commons.apache.org/proper/commons-io/download_io.cgi

一、工具类

工具类包括FileUtils、IOUtils、FilenameUtils和FileSystemUtils,前三者的方法并没有多大的区别,只是操作的对象不同,故名思议:FileUtils主要操作File类,IOUtils主要操作IO流,FilenameUtils则是操作文件名,FileSystemUtils包含了一些JDK没有提供的用于访问文件系统的实用方法。当前,只有一个用于读取硬盘空余空间的方法可用。实例如下

FileUtils的使用:

package com.wj.test;import java.io.File;
import java.io.IOException;
import java.util.List;import org.apache.commons.io.FileUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class FileUtilsTest {private String basePath = null;@Beforepublic void setUp() {basePath = System.getProperty("user.dir") + "\\file\\";}@Afterpublic void tearDown() throws Exception {}/*** 拷贝文件* @throws IOException*/@Testpublic void testCopy() throws IOException {File srcFile = new File(basePath + "a.txt");File destFile = new File(basePath + "b.txt");FileUtils.copyFile(srcFile, destFile);}/*** 删除文件* @throws IOException*/@Testpublic void testDelete() throws IOException{File delFile = new File(basePath + "b.txt");FileUtils.forceDelete(delFile);//FileUtils.forceMkdir(delFile);}/*** 比较文件内容* @throws IOException*/@Testpublic void testCompareFile() throws IOException{File srcFile = new File(basePath + "a.txt");File destFile = new File(basePath + "b.txt");boolean result = FileUtils.contentEquals(srcFile, destFile);System.out.println(result);}/*** 移动文件* @throws IOException*/@Testpublic void testMoveFile() throws IOException{File srcFile = new File(basePath + "b.txt");File destDir = new File(basePath + "move");FileUtils.moveToDirectory(srcFile, destDir, true);}/*** 读取文件内容* @throws IOException*/@Test public void testRead() throws IOException{File srcFile = new File(basePath + "a.txt");String content = FileUtils.readFileToString(srcFile);List<String> contents = FileUtils.readLines(srcFile);System.out.println(content);System.out.println("******************");for (String string : contents) {System.out.println(string);}}/*** 写入文件内容* @throws IOException*/@Testpublic void testWrite() throws IOException{File srcFile = new File(basePath + "a.txt");FileUtils.writeStringToFile(srcFile, "\nyes文件", true);}}

FileSystemUtils的使用:

package com.wj.test;import java.io.IOException;import org.apache.commons.io.FileSystemUtils;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class FileSystemUtilsTest {@Beforepublic void setUp() throws Exception {}@Afterpublic void tearDown() throws Exception {}/*** 获取磁盘空余空间* @throws IOException*/@SuppressWarnings("deprecation")@Testpublic void testFreeSpace() throws IOException {// 以字节为单位System.out.println(FileSystemUtils.freeSpace("c:\\") / 1024 / 1024 / 1024);System.out.println(FileSystemUtils.freeSpace("d:\\") / 1024 / 1024 / 1024);// 以k为单位System.out.println(FileSystemUtils.freeSpaceKb("e:\\") / 1024 / 1024);System.out.println(FileSystemUtils.freeSpaceKb("f:\\") / 1024 / 1024);}}

二、尾端类

不同的计算机体系结构使用不同约定的字节排序。在所谓的“低位优先”体系结构中(如Intel),低位字节处于内存中最低位置,而其后的字节,则处于更高的位置。在“高位优先”的体系结构中(如Motorola),这种情况恰恰相反。

这个类库上有两个相关类:

EndianUtils包含用于交换java原对象和流之间的字节序列。

SwappedDataInputStream类是DataInput接口的一个实例。使用它,可以读取非本地的字节序列。

三、行迭代器

org.apache.commons.io.LineIterator类提供了一个灵活的方式与基于行的文件交互。可以直接创建一个实例,或者使用FileUtils或IOUtils的工厂方法来创建,实例如下:

package com.wj.test;import java.io.File;
import java.io.IOException;import org.apache.commons.io.FileUtils;
import org.apache.commons.io.LineIterator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class LineIteratorTest {private String basePath = null;@Beforepublic void setUp() throws Exception {basePath = System.getProperty("user.dir") + "\\file\\";}@Afterpublic void tearDown() throws Exception {}/*** 测试行迭代器* @throws IOException*/@Testpublic void testIterator() throws IOException{File file = new File(basePath + "a.txt");LineIterator li = FileUtils.lineIterator(file);while(li.hasNext()){System.out.println(li.nextLine());}LineIterator.closeQuietly(li);}}

四、文件过滤器

org.apache.commons.io.filefilter包定义了一个合并了java.io.FileFilter以及java.io.FilenameFilter的接口(IOFileFilter)。除此之外,这个包还提供了一系列直接可用的IOFileFilter的实现类,可以通过他们合并其它的文件过滤器。比如,这些文件过滤器可以在列出文件时使用或者在使用文件对话框时使用。实例如下:

package com.wj.test;import java.io.File;
import java.io.IOException;import org.apache.commons.io.filefilter.EmptyFileFilter;
import org.apache.commons.io.filefilter.SuffixFileFilter;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class FileFilterTest {private String basePath = null;@Beforepublic void setUp() throws Exception {basePath = System.getProperty("user.dir") + "\\file\\";}@Afterpublic void tearDown() throws Exception {}/*** 空内容文件过滤器* @throws IOException*/@Testpublic void testEmptyFileFilter() throws IOException{File dir = new File(basePath);String[] files = dir.list(EmptyFileFilter.NOT_EMPTY);for (String file : files) {System.out.println(file);}}/*** 文件名称后缀过滤器* @throws IOException*/@Testpublic void testSuffixFileFilter() throws IOException{File dir = new File(basePath);String[] files = dir.list(new SuffixFileFilter("a.txt"));for (String file : files) {System.out.println(file);}}}

五、文件比较器

org.apache.commons.io.comparator包为java.io.File提供了一些java.util.Comparator接口的实现。例如,可以使用这些比较器对文件集合或数组进行排序。实例如下:

package com.wj.test;import java.io.File;
import java.io.IOException;import org.apache.commons.io.comparator.CompositeFileComparator;
import org.apache.commons.io.comparator.DirectoryFileComparator;
import org.apache.commons.io.comparator.NameFileComparator;
import org.apache.commons.io.comparator.PathFileComparator;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class ComparatorTest {private String basePath = null;@Beforepublic void setUp() throws Exception {basePath = System.getProperty("user.dir") + "\\file\\";}@Afterpublic void tearDown() throws Exception {}/*** 文件名称比较器* @throws IOException*/@Testpublic void testNameFileComparator() throws IOException {File f1 = new File(basePath + "a.txt");File f2 = new File(basePath + "c.txt");int result = NameFileComparator.NAME_COMPARATOR.compare(f1, f2);System.out.println(result);}/*** 文件路径比较器* @throws IOException*/@Testpublic void testPathFileComparator() throws IOException {File f1 = new File(basePath + "a.txt");File f2 = new File(basePath + "c.txt");int result = PathFileComparator.PATH_COMPARATOR.compare(f1, f2);System.out.println(result);}/*** 组合比较器* @throws IOException*/@SuppressWarnings("unchecked")@Testpublic void testCompositeFileComparator() throws IOException {File dir = new File(basePath);File [] files = dir.listFiles();for (File file : files) {System.out.println(file.getName());}CompositeFileComparator cfc = new CompositeFileComparator(DirectoryFileComparator.DIRECTORY_COMPARATOR,NameFileComparator.NAME_COMPARATOR);cfc.sort(files);System.out.println("*****after sort*****");for (File file : files) {System.out.println(file.getName());}}
}

六、扩展流

org.apache.commons.io.input和org.apache.commons.io.output包中包含的针对数据流的各种各样的的实现。包括:

  • 空输出流-默默吸收发送给它的所有数据
  • T型输出流-全用两个输出流替换一个进行发送
  • 字节数组输出流-这是一个更快版本的JDK类
  • 计数流-计算通过的字节数
  • 代理流-使用正确的方法委拖
  • 可锁写入-使用上锁文件提供同步写入
  • 等等

【跟我学apache-commons】【四】commons-io的使用相关推荐

  1. 时海君:apache第一讲-commons cli

    hello, 大家好,我是时海君,时海君就是我,一个自认为智商偏高,情商偏低的程序员.纵使程序虐我千百遍,我待IT如初恋.从今往后看破红尘,两耳不闻窗外事,一心只写圣贤代码.时海君这些年在java后台 ...

  2. 从PRISM开始学WPF(四)Prism-Module?

    原文:从PRISM开始学WPF(四)Prism-Module? 从PRISM开始学WPF(一)WPF? 从PRISM开始学WPF(二)Prism? 从PRISM开始学WPF(三)Prism-Regio ...

  3. 手挽手带你学React:四档(上)一步一步学会react-redux (自己写个Redux)

    手挽手带你学React入门四档,用人话教你react-redux,理解redux架构,以及运用在react中.学完这一章,你就可以开始自己的react项目了. 之前在思否看到过某个大神的redux搭建 ...

  4. Netty之WebSocket和四种IO介绍

    Netty简介 一.什么是netty? 高性能 事件驱动 异步非堵塞 基于NIO的客户端,服务器端编程框架 稳定性和伸缩性 二.Netty的使用场景 高性能领域   多线程并发领域   异步通信领域 ...

  5. 从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库)

    从零开始学Xamarin.Forms(四) Android 准备步骤(添加第三方Xamarin.Forms.Labs库) 原文:从零开始学Xamarin.Forms(四) Android 准备步骤(添 ...

  6. 从golang-gin-realworld-example-app项目学写httpapi (四)

    从golang-gin-realworld-example-app项目学写httpapi (四) https://github.com/gothinkster/golang-gin-realworld ...

  7. mysql教程qt linux_一步步学Qt,第四天-Linux 下mysql数据库链接

    一步步学Qt,第四天-Linux 下mysql数据库链接 现在在linux系统下面,完成之前的qt-mysql连接工作,此次我新安装了新版的qt,也按照qtassistant对mysqldriver进 ...

  8. VTK-医学三维图像四视图显示以及鼠标滑轮控制切片交互

    VTK-医学三维图像四视图显示以及鼠标滑轮控制切片交互 一.四视图介绍 vs直接创建Qt Widgets Application项目 四视图界面,采用vtk和QVTKOpenGLNativeWidge ...

  9. (素材源代码)猫猫学IOS(四)UI之半小时搞定Tom猫

    下载地址:http://download.csdn.net/detail/u013357243/8514915 以下是执行图片展示 制作思路以及代码解析 猫猫学IOS(四)UI之半小时搞定Tom猫这里 ...

  10. 计算机教材与学情分析,四年级计算机教学计划范文(通用3篇)

    四年级计算机教学计划范文(通用3篇) 日子在弹指一挥间就毫无声息的流逝,我们将带着新的期许奔赴下一个挑战,是时候静下心来好好写写教学计划了.如何把教学计划写出新花样呢?下面是小编精心整理的四年级计算机 ...

最新文章

  1. 通过修改软链接升高 gcc 版本、降低 gcc 版本
  2. 如何用Python批量提取PDF文本内容?
  3. 002.Heartbeat部署及httpd高可用
  4. ICML 2019 | 图马尔可夫神经网络
  5. 计算机藏文论文,计算机论文:藏文陈述句复述生成之计算机研究.docx
  6. 市电中断时,数据中心机房如何保证持续供电?
  7. c语言中lookup函数功能,Lookup函数详解
  8. APUE第八章学习札记之自建简单解释器以及参数分析
  9. 高密自智,体小量大,希捷Exos Corvault存储系统为数据洞察赋能
  10. Win 10 源码一览:0.5 T 代码、400 万文件、50 万文件夹
  11. java access 2013_jdk1.8环境下的java如何直连接microsoft access2013(都是64位系统也是)...
  12. eclipse快速导包快捷键_【IntelliJ IDEA mac新手入门】IDEA如何快速搭建Java开发环境...
  13. 怎么利用计算机辅助评标,计算机辅助评标系统及其的应用.doc
  14. 计算机内部网络连接,在电脑中新建专用网络连接的操作方法【图文教程】
  15. Google的“神秘链接”
  16. arc 093 F Dark Horse
  17. 4.Java数组(一)
  18. fiddler抓包如何只抓手机端的包 不抓电脑的包
  19. 加密与解密 入侵检测 扫描与抓包
  20. 哥德尔定理的背景知识1:戴德金的数观念——哥德尔逻辑与哲学之3

热门文章

  1. 场景应用:我 ping www.yyl.plus 这个网址会用到哪些协议?
  2. 阿里云将静态html网页部署至云服务器
  3. (#号开头)颜色代码表
  4. java createnewfile_Java 中File类的createNewFile()与createTempFile(), delete和deleteOnExit区别
  5. 【id:56】【20分】C. 子串循环问题 (Ver. I)
  6. 工程项目管理系统源码-简洁+好用+全面-工程项目管理系统
  7. [C++中级进阶]001_C++0x里的完美转发到底是神马?
  8. django 单表查询
  9. python万年历实现代码_python万年历实现代码 含运行结果
  10. Linux(Ubuntu)安装和使用Edge浏览器