commons-io使用笔记

本贴最后更新于 2358 天前,其中的信息可能已经时移俗易

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

一、工具类

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

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; @Before public void setUp() { basePath = System.getProperty("user.dir") + "\\file\\"; } @After public void tearDown() throws Exception { } /** * 拷贝文件 * @throws IOException */ @Test public void testCopy() throws IOException { File srcFile = new File(basePath + "a.txt"); File destFile = new File(basePath + "b.txt"); FileUtils.copyFile(srcFile, destFile); } /** * 删除文件 * @throws IOException */ @Test public void testDelete() throws IOException{ File delFile = new File(basePath + "b.txt"); FileUtils.forceDelete(delFile); //FileUtils.forceMkdir(delFile); } /** * 比较文件内容 * @throws IOException */ @Test public 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 */ @Test public 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 */ @Test public void testWrite() throws IOException{ File srcFile = new File(basePath + "a.txt"); FileUtils.writeStringToFile(srcFile, "\nyes文件", true); } }
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 { @Before public void setUp() throws Exception { } @After public void tearDown() throws Exception { } /** * 获取磁盘空余空间 * @throws IOException */ @SuppressWarnings("deprecation") @Test public 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; @Before public void setUp() throws Exception { basePath = System.getProperty("user.dir") + "\\file\\"; } @After public void tearDown() throws Exception { } /** * 测试行迭代器 * @throws IOException */ @Test public 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; @Before public void setUp() throws Exception { basePath = System.getProperty("user.dir") + "\\file\\"; } @After public void tearDown() throws Exception { } /** * 空内容文件过滤器 * @throws IOException */ @Test public 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 */ @Test public 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; @Before public void setUp() throws Exception { basePath = System.getProperty("user.dir") + "\\file\\"; } @After public void tearDown() throws Exception { } /** * 文件名称比较器 * @throws IOException */ @Test public 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 */ @Test public 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") @Test public 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类
  • 计数流-计算通过的字节数
  • 代理流-使用正确的方法委拖
  • 可锁写入-使用上锁文件提供同步写入
  •  

代码下载地址http://download.csdn.net/detail/tianma630/5997629

  • 代码
    467 引用 • 586 回帖 • 9 关注
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • 开源

    Open Source, Open Mind, Open Sight, Open Future!

    411 引用 • 3588 回帖
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖
  • Tomcat

    Tomcat 最早是由 Sun Microsystems 开发的一个 Servlet 容器,在 1999 年被捐献给 ASF(Apache Software Foundation),隶属于 Jakarta 项目,现在已经独立为一个顶级项目。Tomcat 主要实现了 JavaEE 中的 Servlet、JSP 规范,同时也提供 HTTP 服务,是市场上非常流行的 Java Web 容器。

    162 引用 • 529 回帖 • 1 关注
  • SMTP

    SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。

    4 引用 • 18 回帖 • 635 关注
  • 微信

    腾讯公司 2011 年 1 月 21 日推出的一款手机通讯软件。用户可以通过摇一摇、搜索号码、扫描二维码等添加好友和关注公众平台,同时可以将自己看到的精彩内容分享到微信朋友圈。

    133 引用 • 796 回帖
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖 • 1 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖 • 1 关注
  • flomo

    flomo 是新一代 「卡片笔记」 ,专注在碎片化时代,促进你的记录,帮你积累更多知识资产。

    6 引用 • 142 回帖 • 1 关注
  • PostgreSQL

    PostgreSQL 是一款功能强大的企业级数据库系统,在 BSD 开源许可证下发布。

    22 引用 • 22 回帖 • 1 关注
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 3 关注
  • LeetCode

    LeetCode(力扣)是一个全球极客挚爱的高质量技术成长平台,想要学习和提升专业能力从这里开始,充足技术干货等你来啃,轻松拿下 Dream Offer!

    209 引用 • 72 回帖 • 1 关注
  • 代码片段

    代码片段分为 CSS 与 JS 两种代码,添加在 [设置 - 外观 - 代码片段] 中,这些代码会在思源笔记加载时自动执行,用于改善笔记的样式或功能。

    用户在该标签下分享代码片段时需在帖子标题前添加 [css] [js] 用于区分代码片段类型。

    162 引用 • 1079 回帖
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    63 引用 • 289 回帖
  • Excel
    31 引用 • 28 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 2 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    180 引用 • 408 回帖 • 484 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 93 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    150 引用 • 257 回帖 • 1 关注
  • WiFiDog

    WiFiDog 是一套开源的无线热点认证管理工具,主要功能包括:位置相关的内容递送;用户认证和授权;集中式网络监控。

    1 引用 • 7 回帖 • 609 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 1 关注
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    495 引用 • 931 回帖
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 503 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • Solidity

    Solidity 是一种智能合约高级语言,运行在 [以太坊] 虚拟机(EVM)之上。它的语法接近于 JavaScript,是一种面向对象的语言。

    3 引用 • 18 回帖 • 436 关注
  • 以太坊

    以太坊(Ethereum)并不是一个机构,而是一款能够在区块链上实现智能合约、开源的底层系统。以太坊是一个平台和一种编程语言 Solidity,使开发人员能够建立和发布下一代去中心化应用。 以太坊可以用来编程、分散、担保和交易任何事物:投票、域名、金融交易所、众筹、公司管理、合同和知识产权等等。

    34 引用 • 367 回帖 • 4 关注
  • 书籍

    宋真宗赵恒曾经说过:“书中自有黄金屋,书中自有颜如玉。”

    78 引用 • 396 回帖