commons-io使用笔记

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

       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 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • AWS
    11 引用 • 28 回帖 • 11 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    85 引用 • 165 回帖
  • SMTP

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

    4 引用 • 18 回帖 • 637 关注
  • Access
    1 引用 • 3 回帖 • 7 关注
  • Facebook

    Facebook 是一个联系朋友的社交工具。大家可以通过它和朋友、同事、同学以及周围的人保持互动交流,分享无限上传的图片,发布链接和视频,更可以增进对朋友的了解。

    4 引用 • 15 回帖 • 442 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • 反馈

    Communication channel for makers and users.

    126 引用 • 929 回帖 • 266 关注
  • 代码片段

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

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

    132 引用 • 876 回帖 • 4 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 735 关注
  • Node.js

    Node.js 是一个基于 Chrome JavaScript 运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动, 非阻塞 I/O 模型而得以轻量和高效。

    139 引用 • 269 回帖
  • Markdown

    Markdown 是一种轻量级标记语言,用户可使用纯文本编辑器来排版文档,最终通过 Markdown 引擎将文档转换为所需格式(比如 HTML、PDF 等)。

    169 引用 • 1527 回帖
  • LaTeX

    LaTeX(音译“拉泰赫”)是一种基于 ΤΕΧ 的排版系统,由美国计算机学家莱斯利·兰伯特(Leslie Lamport)在 20 世纪 80 年代初期开发,利用这种格式,即使使用者没有排版和程序设计的知识也可以充分发挥由 TeX 所提供的强大功能,能在几天,甚至几小时内生成很多具有书籍质量的印刷品。对于生成复杂表格和数学公式,这一点表现得尤为突出。因此它非常适用于生成高印刷质量的科技和数学类文档。

    12 引用 • 54 回帖 • 20 关注
  • WebSocket

    WebSocket 是 HTML5 中定义的一种新协议,它实现了浏览器与服务器之间的全双工通信(full-duplex)。

    48 引用 • 206 回帖 • 299 关注
  • gRpc
    11 引用 • 9 回帖 • 89 关注
  • Latke

    Latke 是一款以 JSON 为主的 Java Web 框架。

    71 引用 • 535 回帖 • 819 关注
  • 音乐

    你听到信仰的声音了么?

    61 引用 • 512 回帖
  • BAE

    百度应用引擎(Baidu App Engine)提供了 PHP、Java、Python 的执行环境,以及云存储、消息服务、云数据库等全面的云服务。它可以让开发者实现自动地部署和管理应用,并且提供动态扩容和负载均衡的运行环境,让开发者不用考虑高成本的运维工作,只需专注于业务逻辑,大大降低了开发者学习和迁移的成本。

    19 引用 • 75 回帖 • 661 关注
  • 强迫症

    强迫症(OCD)属于焦虑障碍的一种类型,是一组以强迫思维和强迫行为为主要临床表现的神经精神疾病,其特点为有意识的强迫和反强迫并存,一些毫无意义、甚至违背自己意愿的想法或冲动反反复复侵入患者的日常生活。

    15 引用 • 161 回帖
  • SQLite

    SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite 是全世界使用最为广泛的数据库引擎。

    5 引用 • 7 回帖
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 610 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    729 引用 • 1278 回帖
  • Spring

    Spring 是一个开源框架,是于 2003 年兴起的一个轻量级的 Java 开发框架,由 Rod Johnson 在其著作《Expert One-On-One J2EE Development and Design》中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 JavaEE 应用程序开发提供集成的框架。

    946 引用 • 1460 回帖
  • 创业

    你比 99% 的人都优秀么?

    82 引用 • 1395 回帖 • 3 关注
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖 • 1 关注
  • Vim

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

    29 引用 • 66 回帖 • 3 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖